我有一个应该在用户关闭浏览器时触发的功能,并且我已将代码放入window.onbeforeunload
函数中。
情况是,每当我在Internet Explorer中重新加载页面时,也会触发onbeforeunload
事件,这是一个问题,因为我只希望仅在用户关闭或导航离开当前页面但不在页面上时才触发页面刷新/重新加载。
因此,我不确定onbeforeunload
是否打算在页面刷新/重新加载时触发,如果打算触发,那么还有另一种方法可以解决吗?
由于您一直都在使用javascript,因此您可能需要研究解决他们为什么必须刷新页面的问题。您可以使用XMLHttprequest为其刷新内容,以便仅在需要时才调用所需的onbeforeunload函数。
没有明智的解决方法。页面上的任何卸载操作都会触发unload
和beforeunload
事件,并且无法分辨刷新和导航之间的区别。
您可以尝试几件事,但是没有100%的方法。例如,捕获F5或Ctrl + R键将标识一个刷新,您可以为此取消设置onbeforeunload
处理程序,但对于单击刷新的用户将不起作用/ reload按钮。您可以将事件处理程序附加到<a>
元素或任何<form>
onsubmit
的所有单击上,但这对在页面的地址栏中键入新地址的用户无济于事。
即使使用XMLHttprequest刷新,IE也有问题。您必须调用包含XMLHttprequest的javascript函数,例如
<a href="javascript:void(0)" onclick="addContent();">click to add content</a>
将在IE上触发onbeforeunload事件,但在Safari或Firefox上不会触发。
在某些情况下可以使用的一种解决方案是有条件地处理事件,在您要加载内容时将其关闭,然后重新打开它
var guard = true;
function myOnbeforeunloadHandler()
{
if(guard)
{
return "you are about to leave the page and lose data";
}
}
function addContent()
{
getElementById("myDiv").html = "<p>some content</p>";
guard = true;
}
<a href="javascript:void(0) onclick="guard=false;addContent();> click to add content</a>