【发布时间】:2016-09-28 18:38:28
【问题描述】:
我正在尝试实现一个弹出窗口(引导模式样式),该弹出窗口将在网络访问者离开我的网站时触发。
我尝试了以下不同的替代方案:
$(window).bind('beforeunload', function(){
$("#sModal").modal('show');
return 'Take our survey before you leave.';
});
但是,它在 FF 中无法运行,而在 IE 中运行良好。我还遇到了另一个问题,即“你想离开还是留下”警报会显示在我网站本身的任何链接点击上,在所有浏览器类型中,当整个页面正在加载时。
我通过遍历我的所有锚标记并添加一个点击侦听器来删除 beforeunload 侦听器来解决这个问题:
window.onload = function () {
var allLinks = document.getElementsByTagName('a');
for (var i = 0; i < allLinks.length; i++) {
allLinks[i].addEventListener("click", removeBeforeUnload, false);
}
};
removeBeforeUnload 函数只是使用了
$(window).unbind('beforeunload');
回到实际使弹出窗口/模态出现在所有浏览器上,我在文档完成加载后使用了此 stackoverflow 答案中的代码:
window.onbeforeunload and window.onunload is not working in Firefox , Safari , Opera?
此解决方案适用于所有浏览器,但现在我无法在任何本地点击链接上取消绑定此事件!我什么都试过了
window.removeEventlistener('beforeunload',null,false);
window.removeEventlistener('onbeforeunload',null,false);
window.removeBeforeUnload();
window.onbeforeunload = null;
我希望你能指出我正确的方向并解释为什么我无法取消绑定这个事件,这是我从 stackoverflow 答案中使用的。谢谢!
【问题讨论】:
-
尽管我很讨厌你使用卸载事件模式,但这是一个很好的问题,因为我在尝试捕获浏览器上的关闭事件而不捕获刷新、返回等时遇到了同样的问题。
-
@SterlingArcher 谢谢!我希望我能解决这个问题,因为我正处于桌面阶段!我不知道为什么事件监听器没有被注销!?
-
我建议坚持使用 jQuery 风格的
bind/unbind(实际上在更新的 jQuery 版本中应该是on/off),或者简单的 DOM 风格的addEventListener/removeEventListener语义。将两者结合会导致疯狂:)。
标签: javascript jquery addeventlistener onbeforeunload