onbeforeunload确认屏幕定制

时间:2009-08-26 15:51:34

标签: javascript onbeforeunload confirm

是否可以在浏览器中为onbeforeunload事件创建自定义确认框?我尝试了但是后来我得到了2个确认框(一个来自我,这只是返回确认...然后是浏览器中的标准框)。

目前我的代码如下:

var inputChanged = false;

$(window).load(function() {
    window.onbeforeunload = navigateAway;
    $(':input').bind('change', function() { inputChanged = true; });
});

function navigateAway(){
    if(inputChanged){
        return 'Are you sure you want to navigate away?';
    }
}

我正在使用jQuery。

3 个答案:

答案 0 :(得分:11)

window.onbeforeunload = function (e) {
  var message = "Your confirmation message goes here.",
  e = e || window.event;
  // For IE and Firefox
  if (e) {
    e.returnValue = message;
  }

  // For Safari
  return message;
};

请注意:大多数浏览器会将此消息放在其他文本之后。您无法完全控制确认对话框的内容。

答案 1 :(得分:3)

不,你无法避免浏览器中的标准版本。你所能做的只是注入一些自定义文本;如果您使用以下事件处理程序(注册原型lib方式):

Event.observe(window, "beforeunload", function(event) {
    if (showMyBeforeUnloadConfirmation)
        event.returnValue = "foo bar baz";
});

(并showMyBeforeUnloadConfirmation为真)您将获得浏览器的标准确认信息,其中包含以下文字:

  

您确定要离开此页吗?

     

foo bar baz

     

按“确定”继续,或按“取消”停留在当前页面上。

     

[确定] [取消]

答案 2 :(得分:0)

我面临同样的问题,我能够通过我的消息获得自己的对话框,但我遇到的问题是:

  1. 它在所有导航中都给出了消息,我希望它仅用于近距离点击。
  2. 如果用户选择“取消”,则会显示我自己的确认消息,但仍显示浏览器的默认对话框。
  3. 以下是我找到的解决方案代码,我在母版页上写道。

    function closeMe(evt) {
        if (typeof evt == 'undefined') {
            evt = window.event;
        }
        if (evt && evt.clientX >= (window.event.screenX - 150) && evt.clientY >= -150 && evt.clientY <= 0) {
            return "Do you want to log out of your current session?";
        }
    }
    
    window.onbeforeunload = closeMe;