只有在启用了javascript的情况下,IE8才会在IE8模式下重新加载崩溃

时间:2011-08-25 14:59:39

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

以下是版本:

  • IE 8.0.6001.18702
  • Visual Studio Web Developer 2010 10.0.40219.1.SP1Rel
  • .Net 4.0.30319 SP1Rel
  • jQuery 1.6.2

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

VS JIT消息:

  

iexplore.exe [某些PID ]中发生未处理的win32异常。

使用VS进行调试时出现

错误:

  

iexplore.exe中0x3fa078d8处的未处理异常:0xC0000005:访问冲突读取位置0x00000008。

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

  

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

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

为了使它更有趣,这只发生在网站的主页上,并且不能在DEV服务器上重现。切换到IE7模式会导致崩溃。或者评论一下页面底部加载的一些javascript文件。

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

1 个答案:

答案 0 :(得分:5)

我认为崩溃可能与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 + 刷新时,似乎可靠地发生了,呃。

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