“浏览器后退警告”按钮单击或页面刷新

时间:2016-07-11 12:05:17

标签: javascript jquery

我看到同样的功能是多个站点,包括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。

但问题没有解决。

任何建议都会有所帮助。

如果你的代码比这更好,那么它也会有帮助。

4 个答案:

答案 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事件处理程序中创建,除非该页面已经存在   与...互动有些人根本没有显示它们

Documentation

答案 3 :(得分:0)

此代码对我有用。

window.onbeforeunload = function () {
    return 'Are you sure? Your work will be lost. ';
};