我有一个假设在用户关闭浏览器时触发的函数,并且我已将代码放入window.onbeforeunload
函数中。
问题是每次如果我在 Internet Explorer 中重新加载页面,该onbeforeunload
事件也会触发,这是一个问题,因为我只希望它仅在用户关闭或导航离开当前页面时触发,而不是在页面刷新/重新加载时触发.
因此,我不确定是否onbeforeunload
打算在页面刷新/重新加载时触发,如果是这样,那么还有另一种解决方法吗?
我有一个假设在用户关闭浏览器时触发的函数,并且我已将代码放入window.onbeforeunload
函数中。
问题是每次如果我在 Internet Explorer 中重新加载页面,该onbeforeunload
事件也会触发,这是一个问题,因为我只希望它仅在用户关闭或导航离开当前页面时触发,而不是在页面刷新/重新加载时触发.
因此,我不确定是否onbeforeunload
打算在页面刷新/重新加载时触发,如果是这样,那么还有另一种解决方法吗?
由于您按原样依赖 javascript,因此您可能需要研究解决为什么他们必须刷新页面的问题。您可以使用 XMLHttprequest 为它们刷新内容,以便仅在需要时调用所需的 onbeforeunload 函数。
没有聪明的方法可以解决它。页面上的任何卸载操作都会触发unload
和beforeunload
事件,并且无法区分刷新和导航之间的区别。
您可以尝试几件事,但没有 100% 的方法。例如,捕获F5或Ctrl+R键将识别刷新,您可以取消设置onbeforeunload
处理程序,但它不适用于单击工具栏上的刷新/重新加载按钮的用户。您可以将事件处理程序附加到对<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>