Internet Explorer 8中的jQuery问题


78

我正在尝试让我的jQuery函数在IE8上运行。我正在从Google的服务器(http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js)加载库。

$(function(){})永远不会被调用。相反,我得到一个错误Object expected。我打开开发人员并typeof $在控制台中运行,然后显示为undefined

我尝试去其他我知道使用jQuery(jquery.com)的网站,这些网站都可以使用,在这里我可能会缺少一些东西吗?


7
如果看不到您的页面内容,则几乎无法诊断。您能否在代码运行之前确定是否正在加载并运行jQuery库?
09年

看来问题出在jQuery实际加载上。我在jQuery文件中设置了3个断点,所有断点都被认为是无效的,因为没有与该行关联的可执行代码。

尝试更改IE8上的模式,以查看IE7模式或IE8兼容模式是否起作用。您可以通过开发人员工具进行操作。
贾布(Jab)

当尝试从脚本中加载jQuery(通过向标头添加脚本标签)并在同一脚本中调用它时,我遇到了类似的问题。看起来像某种计时问题,jQuery没有及时加载。我通过在HTML代码中使用静态脚本标签解决了该问题。
Tgr 2010年

从Microsoft的CDN加载jQuery时,我遇到了同样的问题-我的解决方案在Chrome浏览器中有效,但在IE8中不起作用。
Marek Grzenkowicz

Answers:


42

定义变量时,请在变量前写“ var”。没有“ var”时,IE8就会死掉。


如果没有“ var”声明,则可以在IE7和IE9中使用。很难理解,MS怎么会错过这样的错误?

谢谢你们的回答...你们今天救了我的头:)
拉维2012年

3
抱歉,这不是事实。我们var用来定义一个具有局部作用域的变量。如果您定义一个不带的变量var,它实际上会创建一个具有全局作用域的属性,即作为窗口对象的属性。更多信息请参见该问题:stackoverflow.com/questions/1470488/...
詹姆斯·麦科马克

你救了我的日子。谢谢!这实际上解决了我的IE10问题。现在,我的jQuery移动网站在所有主要浏览器中的魅力都非常明显:)
casaout 2013年

39

更正:

检查您的脚本包含标签,是否使用

type="application/javascript" src="/path/to/jquery" 

改成

type="text/javascript" src="/path/to/jquery" 

这也是我的解决方法
Blake Niemyjski 2015年

38

我有一个类似的问题。事情可以在以IE7兼容模式运行的IE6,Firefox和IE8中运行。但不是在“普通” IE8中。我的解决方案是将此代码放在标头中

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

至于为什么jQuery不能在IE8中工作,我不清楚。


19
太可怕了!它不能解决问题;它只是在它周围乱砍,可能会造成其他问题。(IE7兼容模式实际上与IE7并不完全相同,它具有自己的错误,怪癖和故障,它们在正常的IE7和IE8中都不会出现)
Spudley 2010年

33
如果您有更好的解决方案,请分享。使事物在IE中工作的许多方法都是黑客。
JeffryHouser,2010年

8
如果是骇客入侵,这是Microsoft推荐的一种。msdn.microsoft.com/zh-CN/library/cc288325(v=vs.85).aspx
eric.christensen 2010年

11
由于有人对此表示反对;请告诉我们原因,并强调您的首选方法。
JeffryHouser 2010年

7
我遇到了这个问题,并通过上面的Richard的解决方案解决了。我将所有<script type =“ application / javascript” ...更改为<script type =“ text / javascript”,包括对google cdn的jquery引用,IE8开始工作。我不必将整个页面都放在兼容模式下即可。
Vineel Shah

12

解决方案是升级到最新版本的jQuery。我遇到了完全相同的问题,并升级到1.4.2,并且在IE8中一切正常。

似乎与我所做的所有jQuery 1.3.2都完全向后兼容,因此这里没有抱怨!


3
我无论如何都遇到1.8的问题。
2013年

10

我遇到了这个问题,尝试了此处提到的解决方案,但没有成功。

最终,我意识到我正在使用http URL嵌入脚本的页面是的同时链接到该脚本的Google CDN版本https page

这导致IE无法加载jquery(它提示用户是否只加载安全内容)。更改Google CDN URL以使用https方案对我来说解决了这个问题。


我知道这是旧的文章,但你可能想看看这个-它的方式部分现在Google建议你使用它的CDN(其摆脱这个问题)
STEF

8

绊倒这篇文章的某些人可能会使用jquery和IE8遇到此问题,因为他们使用的是> = jQuery v2。使用此代码:

<!--[if lt IE 9]>
    <script src="jquery-1.9.0.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0.js"></script>
<!--<![endif]-->


6

尚未加载jQuery,这不太可能特定于IE8。检查jQuery include上的路径。声明。或者更好的是,将以下内容用于CDN:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>

3
一切都可以在Firefox,Safari和Chrome中使用。我可以说该库正在下载,只是没有执行。我在jquery文件中的行上设置了一个断点,然后说没有与该行关联的可执行代码。

5

我是通过固定创建的模板还有谁忘了,包括文档类型。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

如果您不声明doctype IE8在Quirks模式下会做一些奇怪的事情。


我尝试了上面的所有建议...更改了doctype(从HTML5的“ <!DOCTYPE html>”终于可以正常工作了。(在Dev Tools中,它表明元素的类实际上发生了变化,但是我猜测是IE8的呈现引擎没有变化) (对于无法识别的文档类型,将在DOM更改后刷新))
Stephen M. Harris,

4

Object expected引发错误,因为未加载Jquery。发生这种情况是由于浏览器安全性(通常是IE)导致的,该安全性不允许您执行外部javascript源代码。您可以通过以下方法解决此问题:

  • 1:更改浏览器安全级别,以允许执行外部javascript代码。你可以在这里找到如何做

要么

  • 2:将jquery源代码复制粘贴到您的网页中,这样就不会将其视为外部脚本。

我更喜欢第一个解决方案。


4

onload事件并不总是在IE7 / 8中起作用<head> ... </head>

您可以通过在页面末尾的标记之前添加一个onload脚本来强制执行此操作,如下所示。

  <script>
    window.onload();
  </script>
</body>

2

也许您插入两个脚本,应该可以。

<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">/script> 

2

这解决了我在IE8中的问题:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

在本地主机上运行,​​我不得不将https://更改为http://

如果尝试浏览到安全链接,则Internet Explorer无法显示 友好的网页警告。

如果有问题,请始终先尝试在浏览器中加载文本脚本!


2

我有同样的问题。

我解决了这个问题,验证是否未正确配置IE8才能访问SRC URL。

我改变了它,它工作正常。




1

我认为您和我有同样的问题:

Message: Permission denied
Line: 13
Char: 27021
Code: 0
URI: http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.3.2.min.js

由于跨域引用。尝试在同一域上托管jquery.js。


0

简而言之,这是因为IE8解析引擎。

猜猜为什么Microsoft在使用新的HTML5标签(例如“ section”)时也会遇到麻烦?这是因为MS决定不像世界其他地区那样使用常规XML解析。是的,没错-他们在XML上进行了大量宣传,但最后,他们依靠“愚蠢”的解析引擎寻找“已知标签”,并在出现新情况时弄乱了东西。

IE8和带有“ load”,“ get”和“ post”的jquery问题也是如此。再次,Microsoft决定使用版本8“走自己的路”。希望他们在IE9中解决此问题,当前的唯一选择是依靠IE7解析<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

哦,好吧……微软让我们再次在论坛上发布东西真是令人惊讶。;)


0

我的解决方案是从您要访问的URL中删除所有特殊字符。我在那里有一个波浪号(〜)和一个百分比符号,并且$ .get()调用无声地失败了。


0

好!我知道jQuery正在加载。我知道jQuery.textshadow.js正在加载。我可以在开发人员工具中找到两个脚本。

奇怪的部分:此代码在内容区域中有效,但在横幅中不起作用。甚至具有敬业精神fixIE.css。当我将CSS内联时,它可以工作。(那当然会弄乱FireFox。)

我什至没有在横幅中的文本字段中放置条件IE跨度,也没有运气。

我发现没有差异,有两个同样的错误jquery-1.4.2.min.jsjquery-1.2.6.min.jsjquery.textshadow.js是从jQuery网站下载的,同时试图找到此问题的解决方案。

这没有发布到网站

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.