javascript - 仅当站点位于本地主机时、仅当启用 JavaScript 时、仅在 IE8 模式下,IE8 才会在重新加载时崩溃

标签 javascript jquery visual-studio-2010 internet-explorer-8 localhost

以下是版本:

  • IE 8.0.6001.18702
  • Visual Studio Web 开发人员 2010 10.0.40219.1.SP1Rel
  • .Net 4.0.30319 SP1Rel
  • jQuery 1.6.2

当我通过 Visual Studio 在本地主机上运行该网站时,将 IE 设置为 IE8 模式并启用 JavaScript,重新加载页面时浏览器将崩溃。当 URL 更改或选项卡/窗口关闭时,它不会崩溃。我收到的消息是:

VS JIT 消息:

An unhandled win32 exception occurred in iexplore.exe [some PID].

用VS调试时出错:

Unhandled exception at 0x3fa078d8 in iexplore.exe: 0xC0000005: Access violation reading location 0x00000008.

调用堆栈位置:mshtml.dll!3fa078d8()

3FA078D8 mov eax,dword ptr [ebx+8]

当我取消调试时,页面通常在选项卡中加载得很好。我时不时会收到“我们无法让您返回到您正在查看的页面”的信息。消息。

为了让它更有趣,这只发生在网站的主页上,并且不能在 DEV 服务器上重现。切换到 IE7 模式可以使崩溃不再发生。或者注释掉页面底部加载的一些 javascript 文件。

我尝试在禁用插件的情况下运行 IE8,但崩溃仍然发生。我尝试在启用 Fiddler 的情况下运行,但它仍然崩溃。

最佳答案

我认为崩溃可能与使用 window.setTimeout()window.setInterval() 有关,因为它们似乎是唯一使用的常用功能跨不同的 JS 文件,导致项目在注释掉时停止崩溃。在我们的 global.js 中,我添加了以下代码来代替使用:

(function (w) {

    w.windowBind = function (eventName, handler) {
        if (w.attachEvent) {
            w.attachEvent("on" + eventName, handler);
        } else if (w.addEventListener) {
            w.addEventListener(eventName, handler, false);
        } 
    };

    var timeoutsToExpire = [],
        expireTimeouts = function () {
            for (var i = 0, l = timeoutsToExpire.length; i < l; i++) {
                w.clearTimeout(timeoutsToExpire[i]);
            }
            timeoutsToExpire = [];
        },
        intervalsToExpire = [],
        expireIntervals = function () {
            for (var i = 0, l = intervalsToExpire.length; i < l; i++) {
                w.clearInterval(intervalsToExpire[i]);
            }
            intervalsToExpire = [];
        };

    w.setExpiringTimeout = function (func, time) {
        var id = w.setTimeout(func, time);
        timeoutsToExpire.push(id);
        return id;
    };

    w.setExpiringInterval = function (func, time) {
        var id = w.setInterval(func, time);
        intervalsToExpire.push(id);
        return id;
    };

    w.windowBind("unload", function () {
        // expire timers
        expireTimeouts();
        expireIntervals();
    });
    w.windowBind("beforeunload", function () {
        // expire timers
        expireTimeouts();
        expireIntervals();
    });

})(window);

然后我更新了之前的 window.setTimeout()window.setInterval() 引用以改用这些助手。这似乎暂时解决了这个问题。

更新:也许我发布得太早了,它再次崩溃了。不过,他们现在似乎断断续续。

更新 2: 好吧,当我现在 shift+refresh 时,它似乎可靠地发生,呃。

更新3:尝试了最新的jQuery RC,崩溃消失了,发行说明提到了2个IE8崩溃错误:http://blog.jquery.com/2011/08/29/jquery-1-6-3-rc1-released/

关于javascript - 仅当站点位于本地主机时、仅当启用 JavaScript 时、仅在 IE8 模式下,IE8 才会在重新加载时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192637/

相关文章:

javascript - 限制输入字段不能有相同的输入

javascript - JQuery UI 选项卡 : How do I navigate directly to a tab from another page?

jquery - 使用 jQuery 更改字体系列

javascript - 使用 jquery 在 div 内的 anchor 标记中添加类

c# - 在Windows中访问其他一些特定于应用程序的卷

javascript - 如何更改对象数组中数组中的每个值?

javascript - 如何在Jquery中从ajax成功中识别调用者方法?

javascript - 如何在 javascript 上执行 2 个 onClick 操作?

visual-studio-2010 - Visual Studio 编辑标签文本快捷方式

c++ - 计算两幅图像的均方误差