【问题标题】:What are the most likely causes of Javascript errors in IE8?IE8 中 Javascript 错误的最可能原因是什么?
【发布时间】:2016-11-23 04:37:52
【问题描述】:

在 IE7(以及 Firefox、Chrome 和 Safari)中运行良好的页面上,我在 IE8 中看到了很多 Javascript 错误。我知道 IE 对 Javascript 安全性等内容进行了一些更改。其中一些没有给出明确的错误消息 - 诸如跨域违规之类的事情最终可能会引发非常模糊的异常。

当我们排查 IE8 Javascript 错误时,让我们列出最严重的问题。请列出一个对 IE8 Javascript 方式的更改会导致 Javascript 错误。

【问题讨论】:

    标签: javascript internet-explorer internet-explorer-8


    【解决方案1】:

    我可以验证“unique_username”发布的内容是否准确!

    (引用) 实际上,很多东西都发生了变化。

    首先,您所处的模式非常重要。在 IE8 中,有 3(三种)模式。

    • IE5 怪癖 - 您的页面没有 doctype,页面呈现方式与 IE5 类似
    • IE 7 标准模式 - 你有一个 doctype,但要么选择退出 IE8 标准模式,要么在本地主机上运行,​​要么处于“兼容模式”
    • IE 8 标准模式 - 您有一个 doctype,并且在 INTRANET 上(默认模式)

    现在,如果您在 IE5/IE7 模式下进行渲染,那么除了将添加一些不应干扰您的页面的方法之外,没有任何变化。

    但是,如果像大多数人一样,您正在使用 doctype 集运行,因此在 IE8 标准模式下,发生了以下更改。

    1.) document.getElementById( id ); //now only returns the CORRECT matches!
    

    2.) .getElementsByName(name); //现在只返回正确的匹配!不,不固定!

    3.) .getAttribute( name ); //returns the CORRECT value for the given attribute!
    4.) .setAttribute( name, value ); //actually SETS the name/value CORRECTLY (no more cAmElCaSe crud)!
    5.) CSS Expressions are NO LONGER allowed (deprecated)
    6.) Operation Aborted errors will still be thrown (in some cases) however the cases are fewer, and the error won't kill the entire page/DOM
    7.) The attributes[] array on elements should (from the RC build onwards) be correct in terms of contents, have a length, etc.
    8.) Button elements now submit the contents of the value attribute, NOT the HTML contents of the Button Tag
    

    还有一堆 CSS 2.1 修复程序,所以以前呈现怪异或需要 hack 的东西应该会好得多。 (有关 alpha/透明度的详细信息,请参见下文 - 发生了很大变化)

    详情请参阅IE Blog

    另请参阅Web Bug Track,了解有关 IE8(和所有其他浏览器)的错误、修复的详细信息

    SVG、圆角、基于 ECMAScript 的事件监听器、更好的表单元素设计/事件等仍然缺失。

    PS 如果您有具体问题,请告诉我们,我们会帮助您解决问题。 ;-)

    更新:

    window.resize 事件目前在 IE8 Beta2 和 IE8 Partner Release 1 中被破坏(不会触发)现已在 RTM 构建中修复

    window.open(); in IE8 Partner Release is sometimes failing "claiming" that the target url is not available (quirky, hard to reproduce)
    

    【讨论】:

      【解决方案2】:

      这是我发现的一个非常有趣的(/讽刺关闭)。如果您的 MIME 类型为“application/javascript”,而不是“text/javascript”,Internet Explorer 将:

      A) 忽略意外的 MIME 类型并使用该文件?

      B) 根本不加载文件?

      C) 取文件的前一百行左右,将它们添加到 HTML 中位于它之前的另一个 JS 文件中,然后给你各种错误,因为你的乱序半文件 + 实际文件不行吗?

      没错,答案是 C……我不骗你。我们曾经使用“application/javascript” MIME 类型来防止 IE6/7 中的 JS 文件缓存,结果我浪费了一整天的时间试图弄清楚为什么 IE8 会给出一些非常疯狂的错误。幸运的是,当它告诉我在 500 行文件的第 650 行出现错误时,我终于弄清楚发生了什么(然后当我在调试器中查看该文件时,我看到了附加的其他文件)。

      故事的寓意:如果您希望 IE8 工作,请不要使用“application/javascript”作为 JS 文件的 MIME 类型。

      【讨论】:

      • 原来仅仅改变HTTP响应头的MIME类型是不够的;最终我不得不完全放弃我们的 Javascript servlet,因为 Apache 静态提供的 JS 文件在 IE8 中工作得很好(我不想浪费更多时间来修复 servlet 的标头)。
      • 我以为我快疯了!!!这不是假设是“标准”吗??? application/javascript 只是用 IE 8 破坏了我的跨站点 JSONP...谢谢!
      • 即使对于 IE9,这似乎也是如此。
      【解决方案3】:

      我在这里找到了一些列表:http://social.msdn.microsoft.com/forums/en-US/iewebdevelopment/thread/772e4b07-29e1-4909-b77f-f61c503f9579/

      我还没有验证这些,其中一些非常模糊。

      【讨论】:

        【解决方案4】:

        参加这个聚会有点晚了,但在研究同样的问题时,我遇到了这篇 MSDN 文章,其中重点介绍了 IE 8 的 JScript 引擎不支持的功能。

        【讨论】:

          猜你喜欢
          • 2013-06-25
          • 1970-01-01
          • 2011-11-18
          • 2014-10-08
          • 2022-07-01
          • 2016-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多