tra*_*vis 2 javascript jquery localhost visual-studio-2010 internet-explorer-8
以下是版本:
当我通过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运行,它仍然崩溃.
我认为崩溃可能与使用有关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);
Run Code Online (Sandbox Code Playgroud)
然后,我更新了以前window.setTimeout()和window.setInterval()引用为了使用它们来代替.这似乎暂时解决了.
更新:也许我发布的太快了,它再次为我崩溃了.现在他们似乎非常间歇.
更新2:好的,当我shift+ refresh现在,它似乎可靠地发生,呃.
更新3:尝试了最新的jQuery RC,崩溃消失了,发布说明提到了2个IE8崩溃的bug:http://blog.jquery.com/2011/08/29/jquery-1-6-3-rc1-发布/