5

我有一个假设在用户关闭浏览器时触发的函数,并且我已将代码放入window.onbeforeunload函数中。

问题是每次如果我在 Internet Explorer 中重新加载页面,该onbeforeunload事件也会触发,这是一个问题,因为我只希望它仅在用户关闭或导航离开当前页面时触发,而不是在页面刷新/重新加载时触发.

因此,我不确定是否onbeforeunload打算在页面刷新/重新加载时触发,如果是这样,那么还有另一种解决方法吗?

4

3 回答 3

1

由于您按原样依赖 javascript,因此您可能需要研究解决为什么他们必须刷新页面的问题。您可以使用 XMLHttprequest 为它们刷新内容,以便仅在需要时调用所需的 onbeforeunload 函数。

于 2010-05-27T21:08:24.687 回答
0

没有聪明的方法可以解决它。页面上的任何卸载操作都会触发unloadbeforeunload事件,并且无法区分刷新和导航之间的区别。

您可以尝试几件事,但没有 100% 的方法。例如,捕获F5Ctrl+R键将识别刷新,您可以取消设置onbeforeunload处理程序,但它不适用于单击工具栏上的刷新/重新加载按钮的用户。您可以将事件处理程序附加到对<a>元素或任何元素的所有点击<form> onsubmit,但这对于从您的页面在地址栏中键入新地址的用户没有帮助。

于 2010-05-04T08:34:46.607 回答
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>
于 2010-07-02T23:15:08.417 回答