我有一个函数,假设在用户关闭浏览器时触发,我将代码放在“window.onbeforeunload”函数中。
每次如果我在Internet Explorer中重新加载页面,onbeforeunload事件也会触发这是一个问题,因为我只希望它只在用户关闭或导航离开当前页面时触发,而不是在页面刷新/重新加载。
因此,我不确定onbeforeunload是否打算在页面刷新/重新加载时触发,如果是这样,那么还有另一种方法可以解决它吗?感谢
答案 0 :(得分:2)
由于您依赖于javascript,因此您可能需要考虑解决他们为什么必须刷新页面的问题。您可以使用XMLHttprequest刷新它们的内容,以便只在需要时调用所需的onbeforeunload函数。
答案 1 :(得分:0)
没有聪明的方法来解决它。页面上的任何卸载操作都会触发unload
和beforeunload
事件,并且无法区分刷新和导航。
你可以尝试一些事情,但没有100%的方法。例如,捕获 F5 或 Ctrl + R 键将识别刷新,您可以取消设置onbeforeunload
处理程序,但是对于单击工具栏上的刷新/重新加载按钮的用户来说,它不起作用。您可以为<a>
元素或任何<form>
onsubmit
上的所有点击附加事件处理程序,但这对于从您的地址栏输入新地址的用户无效页。
答案 2 :(得分:0)
即使你使用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>