首页 文章

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

提问于
浏览
2

以下是版本:

  • 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 回答

  • 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() 引用来代替使用这些帮助器 . 这似乎暂时解决了 .

    Update: 也许我发布的太快了,它只是再次撞到了我 . 现在他们似乎非常间歇 .

    Update 2: 好吧,当我现在换班时,似乎可靠地发生了,呃 .

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

相关问题