Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mozilla firefox无法使用window.onbeforeunload_Javascript_Jquery_Firefox_Dom Events_Onbeforeunload - Fatal编程技术网

Javascript Mozilla firefox无法使用window.onbeforeunload

Javascript Mozilla firefox无法使用window.onbeforeunload,javascript,jquery,firefox,dom-events,onbeforeunload,Javascript,Jquery,Firefox,Dom Events,Onbeforeunload,我使用的是window.onbeforeunload在windows关闭时向用户显示消息,该功能在Chrome和IE上运行良好,但在Firefox上不起作用,我使用的是Firefox版本26.0我尝试过很多次,但都没有意义,有人说这是Firefox中的一个bug,还有人建议一些解决方案,我尝试了所有可用的Javascript和jQuery解决方案,但都不起作用,现在我显示一个确认对话框,但浏览器默认对话框出现在它之后,我对此不满意,我还尝试使用preventDefault()阻止浏览器默认对话框

我使用的是
window.onbeforeunload
在windows关闭时向用户显示消息,该功能在Chrome和IE上运行良好,但在Firefox上不起作用,我使用的是Firefox版本
26.0
我尝试过很多次,但都没有意义,有人说这是Firefox中的一个bug,还有人建议一些解决方案,我尝试了所有可用的Javascript和jQuery解决方案,但都不起作用,现在我显示一个确认对话框,但浏览器默认对话框出现在它之后,我对此不满意,我还尝试使用
preventDefault()
阻止浏览器默认对话框出现,但也毫无意义!如果有任何解决此问题的方法,那就太好了,下面是我如何使用
窗口。onbeforeunload

<script>
window.onbeforeunload = confirmWinClose();
function confirmWinClose() {
     var myVar ='${isFireFox}';
     if(myVar=='true'){
         return confirm(confirmExamClose);
     }else{
         return confirmExamClose;
     }

}
<script>

window.onbeforeunload=confirmWinClose();
函数confirmWinClose(){
var myVar='${isFireFox}';
如果(myVar=='true'){
返回确认(confirmExamClose);
}否则{
返回confirmExamClose;
}
}

注意:
isFireFox
是一个jsp变量,我使用
User Agent
头知道浏览器的类型,
confirmExamClose
是我向用户显示的消息。

为什么在这里进行浏览器嗅探?代码的“Firefox”分支正在返回
窗口的返回值。请确认
,这是一个布尔值。但是布尔值是不可调用的,因此将其分配给
window.onbeforeunload
与分配null相同

您可能要做的是删除浏览器嗅探,然后执行以下操作:

window.onbeforeunload = confirmExamClose;

以下是Firefox和Chrome的有效解决方案。我还没考过狩猎和歌剧

var myEvent = window.attachEvent || window.addEventListener;
var chkevent = window.attachEvent ? 'onbeforeunload' : 'beforeunload'; /// make IE7, IE8 compitable

myEvent(chkevent, function(e) { // For >=IE7, Chrome, Firefox
    var confirmationMessage = 'Are you sure to leave the page?';
    (e || window.event).returnValue = confirmationMessage;
    return confirmationMessage;
});

我花了2天的时间寻找Firefox
onbeforeunload
解决方案,但运气不佳,所以我为此付出了努力,并用了一点小技巧

在我的技巧中,用户至少需要单击浏览器窗口一次。 如果用户单击窗口,然后单击“上一步”按钮,刷新页面,或尝试退出页面,
onbeforeunload
事件将触发

$(窗口).on('beforeunload',函数(){
return“是否确实要退出此页面?”;
});
$(窗口)。一('单击',函数(){
警报(“hi”);
$('.javavoid').trigger('click');
});
.hide{display:none;}

欢迎,单击任意位置,然后单击“上一步”按钮或刷新页面


在firefox/chrome/IE11中使用MDN中给出的代码对我很有效(目前还没有尝试其他浏览器)


以下是文档:

运行处理程序工作正常。不再允许使用beforeunload处理程序设置对话框(除了返回false),因为有太多的网站滥用了该功能。尽管这一功能有效,但firefox上不会显示确认消息。去寻找这样做的方法…这是firfox行为@Jim,firefox不允许显示自定义消息。@faisale我不想显示确认消息,我怎么能做到这一点?我不明白,上面的代码是显示确认消息,如果你不想显示,那么在html中注释掉上面的代码。
window.onbeforeunload = function (e) {
  var e = e || window.event;

  // For IE and Firefox
  if (e) {
    e.returnValue = 'Any string';
  }

  // For Safari
  return 'Any string';
};