javascript removeEventListener(“beforeunload”)无效

时间:2016-03-16 14:18:18

标签: javascript javascript-events event-handling onbeforeunload

我有一个Web Worker将消息发送到主页面。

我为Web Worker的消息事件添加了一个监听器:

  • 当消息的内容为 0 时,我会为 beforeunload 事件的窗口对象添加一个监听器。

  • 当消息内容为 1 时,我删除 beforeunload 事件的上一个侦听器。

这是主页:(main.html)

<html>
<head>
<meta charset="UTF-8">
<script>
new Worker("worker.js").addEventListener("message",function(e){
    function unloadPage(e){
        console.info("event triggered",e);
    }

    if(e.data==0){
        console.log("event added");
        window.addEventListener("beforeunload",unloadPage,false);
    }
    else{
        console.log("event removed");
        window.removeEventListener("beforeunload",unloadPage,false);
    }
},false);
</script>
</head>
<body></body>
</html>

这是Web Worker:(worker.js)

postMessage(0);
postMessage(1); 

控制台的内容:

"event added"
"event removed"

由于我在添加时使用相同的事件( beforeunload ),所以使用相同的函数( unloadPage )和相同的第三个参数( false )或删除,我希望事件被正确删除。

但是当我刷新页面时,会调用 unloadPage ()函数。

如果我在全局范围内声明 unloadPage ,则会正确删除该事件。但我不想这样做。

我觉得 addEventListener 中的 unloadPage removeEventListener 中的 unloadPage 不同,但我不知道理解为什么因为它是相同的功能。

我在Firefox 45.0和47.0上测试过。

提前致谢。

0 个答案:

没有答案