2011-10-17 97 views
2

任何人都知道为什么window.location在ie8(也许ie7也是)中未定义,但作为document.location?window.location在ie8中是未定义的

我找不到为什么另一个文件,从其他项目有一个类似的代码,但没有与IE浏览器的问题。

我也得到一个奇怪的错误:'window.location.hash为空或不是jquery 1.6.4第2行中的对象'。我也试过1.5.1,但同样的错误。

标题:

<html lang=""> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <link rel="stylesheet" href="assets/css/style.css"> 
    <script src="assets/js/jquery.1.6.4.min.js"></script> 
    <!--[if lt IE 9]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
    <![endif]--> 

    <script src="assets/js/jquery.easing.1.3.js"></script> 
    <script src="assets/js/jquery.ba-hashchange.min.js"></script> 
    <script src="assets/js/script.js"></script> 
</head> 

JS部分:

if(window.onhashchange) 
{ 
    window.onhashchange = function() 
    { 
     hashChanged(window.location.hash); 
    } 
} 
else 
{ 
    var storedHash = window.location.hash; 
    window.setInterval(function() 
    { 
     if(window.location.hash != storedHash) 
     { 
      storedHash = window.location.hash; 
      hashChanged(storedHash); 
     } 
    }, 100); 
} 
+3

你是否缺少'<!DOCTYPE html>'或者你没有粘贴? – canon

+0

它只是*在IE中的问题?或其他浏览器呢?你有没有名为'location'的变量? – user113716

+0

只是IE。是这样的,@Ӫ_._Ӫ –

回答

6

的东西在你的项目可能会改写window.location,尽管这不会在IE 9的工作:

var location; 

alert(window.location); 
//-> "undefined" 

您可以使用delete运算符来删除变量(尽管technicall你不应该能够,但它确实工作):

delete location; 

但最好的解决方案是寻找您的文件中的违规的一段代码。

+1

我刚刚在IE8中证实了这一点。这是一些可怕的东西。 –

+0

我做了一些更糟糕的'window = $(document.window);'。现在,我看到了一塌糊涂。为什么这个错误代码在其他浏览器上工作?谢谢! –

+0

这不是一个错误。这是设计,其他浏览器也是这样做的。如果你在全局范围内定义一个'var location',那么它是一个全局变量,因此等同于'window.location'。看起来很吓人,而且有潜在的危险,但了解JavaScript如何工作表明它在技术上是正确的行为。我觉得有点愚蠢,但有什么更好的学习方式? :) –