我相信每个 Web 开发人员都遇到过这种情况,但 IE 并没有按照我的意愿执行。目前的问题是它在页面未卸载时触发onbeforeunload 。我已经在另一个问题中问过这个问题,并且我已经解决了任何document.write()
问题、任何锚点以及所有其他导致页面“卸载”的荒谬事情。也就是说,据我所知。该事件仍然在不应该触发的时候触发。
我想知道是否有任何方法可以标记导致事件触发的原因或删除任何会导致事件触发的东西,这有点荒谬。要么防止不得不处理它,要么解决可能导致事件发生的任何事情。
如果答案是简单的“不”,我会垂头丧气,继续尝试解决这个荒谬的浏览器,但我想我会在放弃之前尝试挑选聪明人的大脑。
更多信息
我在此页面上使用jfileupload 。这是事件的代码。bCancel
设置false
在页面的最开头,因此除非开始上传,否则不会发生这种情况。canClose
在开始时设置为true
,以便取消上传不会要求再次关闭窗口。该事件onbeforeunload
在文件通过小程序完成上传后立即触发。
document.uploader.setEnabled(true);
function JSTransferTriggered(){
bCancel=true;
}
function JSTransferDone(){
bCancel=false;
window.open("uploads_finished.php",'_self',null);
}
function JSTransferCancelled(){
$.ajax({
'async': false,
'type': 'POST',
'url': 'cancel.php'
});
bCancel=false;
if(canClose)self.close();
}
$(window).load(function(){
$(window).bind('beforeunload',function(){
document.uploader.setEnabled(false);
if(bCancel){
canClose=false;
document.uploader.cancel();
}
});
});
当小程序中发生某些事件时,上传者使用类似于等的其他函数JSTransfertriggered
来调用。JSTransferDone
这些函数没有被改变,它们所做的只是调用一个log
如下所示的函数:
function log() {
var msg = Array.prototype.join.call(arguments, '');
var match = msg.match(/^([a-zA-Z]+)\((.*)\)/);
if (match) {
msg = ["<span class='fname'>", match[1], '</span>',
"<span class='p'>(</span>",
match[2],
"<span class='p'>)</span><br>"].join('');
}
//msg = msg.replace(/^[a-zA-Z]+/, "<span class='fname'>$&</span>");
var elt = document.getElementById('event_log');
//elt.appendChild(document.createTextNode(msg + "\n"));
elt.innerHTML += msg;
}
我并不是说我已经完美或完全清除了所有列出的触发器的页面。我正在尝试找出一种方法来找到触发事件的原因,以便修复它。