我看到同样的功能是多个站点,包括SO。我也在努力实现这一目标。 这是迄今为止的代码。
<script>
var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload';
myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
var confirmationMessage = ' ';
(e || window.event).returnValue = confirmationMessage;
return confirmationMessage;
});
</script>
问题是上面的代码在chrome和IE中运行良好但是当我尝试在Firefox上测试时它无法正常工作。我检查了萤火虫,但没有错误。 我更新了firefox,版本是47.0.1。
但问题没有解决。
任何建议都会有所帮助。
如果你的代码比这更好,那么它也会有帮助。
答案 0 :(得分:2)
使用下面的代码,我在firefox中测试它并且工作正常:
window.addEventListener("beforeunload", function (e) {
var confirmationMessage = "\o/";
(e || window.event).returnValue = confirmationMessage; //Gecko + IE
return confirmationMessage; //Webkit, Safari, Chrome
});
答案 1 :(得分:1)
我测试了这段代码,即使关闭了firebug控制台,它仍在使用firefox和chrome:
<script>
window.onbeforeunload = function (e) {
var message = "Are you sure ?";
var firefox = /Firefox[\/\s](\d+)/.test(navigator.userAgent);
if (firefox) {
//Add custom dialog
//Firefox does not accept window.showModalDialog(), window.alert(), window.confirm(), and window.prompt() furthermore
var dialog = document.createElement("div");
document.body.appendChild(dialog);
dialog.id = "dialog";
dialog.style.visibility = "hidden";
dialog.innerHTML = message;
var left = document.body.clientWidth / 2 - dialog.clientWidth / 2;
dialog.style.left = left + "px";
dialog.style.visibility = "visible";
var shadow = document.createElement("div");
document.body.appendChild(shadow);
shadow.id = "shadow";
//tip with setTimeout
setTimeout(function () {
document.body.removeChild(document.getElementById("dialog"));
document.body.removeChild(document.getElementById("shadow"));
}, 0);
}
return message;
};
</script>
我找到了这个脚本crossbrowser-onbeforeunload.js。它是跨浏览器兼容的。
答案 2 :(得分:0)
window.onbeforeunload 是一个很好的方法。但是,只有当用户与网站进行交互(点击或滚动)时,它似乎才在Firefox中运行。否则功能不会触发。另一方面,Chrome非常棒。
注意:为了防止不需要的弹出窗口,某些浏览器不会显示提示 在beforeunload事件处理程序中创建,除非该页面已经存在 与...互动有些人根本没有显示它们
答案 3 :(得分:0)
此代码对我有用。
window.onbeforeunload = function () {
return 'Are you sure? Your work will be lost. ';
};