我有一个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上测试过。
提前致谢。