如何为Google表单iframe禁用默认浏览器消息“您确定要离开此页面吗?”

时间:2017-04-12 15:41:04

标签: javascript google-chrome iframe

我通过Bootstrap模式隐藏了iframe,其中包含Google表单网址。

<div class="modal fade" id="sugestaoPL" tabindex="-1" role="dialog">
    <div class="modal-dialog modal-lg" role="document">
       <div class="modal-content">
           <div class="modal-header">
               <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
               <h4 class="modal-title">My Modal Title</h4>
           </div>
           <div class="modal-body">
              <iframe src="<?php echo ot_get_option('iframe_url'); ?>"></iframe>
           </div>
           <div class="modal-footer">
              <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
           </div>
      </div><!-- /.modal-content -->
   </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

每当我尝试离开或重新加载页面时,浏览器都会告诉我默认“您确定要离开此页面,未保存的更改会丢失”消息,可能是因为我要离开带有Google表单的页面不变。

由于在大多数用例中我的用户不会让模态可见,因此不会使用Google表单,我想禁用此默认邮件。我知道该消息来自Google表单,因为如果删除模式代码,浏览器消息就会消失。

我发现删除此默认行为的解决方案是添加

window.onbeforeunload = null

在我的代码中。我做了什么。我在$(document).ready(){}之内,在它之外,在关闭</body>标记之前的头部和页脚中尝试过,并且没有任何替代方法阻止此对话出现。

我担心这是因为它在iframe内。

如何消除此默认对话?

3 个答案:

答案 0 :(得分:1)

不幸的是,我无法解决主要问题,但我找到了解决方法。正如here所指出的那样,这似乎是Google的一个问题。但是链接中指出的解决方法对我来说并不起作用。

这是可行的解决方法

jQuery(window).bind('beforeunload', function(){
    if(jQuery('.modal').is(':visible') === false){
        jQuery( ".modal" ).remove();
    }
});

它的作用是,如果我试图离开页面时没有打开模态,则在页面加载之前从页面中删除.modal元素。通过这种方式,iframe也会被移除,并且&#34;您确定要离开此页面&#34;离开了。

答案 1 :(得分:0)

   location.href = "javascript:(" + function() {
   window.onbeforeunload = null;
   window.onunload = null;
  } + ")()";

看一下这个帖子 reference

答案 2 :(得分:0)

如果你设置window.onbeforeunload = someFunction;你可以用window.onbeforeunload = null来取消它。

但是,如果设置window.addEventListener('beforeunload',someFunction);,则无法使用window.onbeforeunload = null删除此事件侦听器。 它只能用 removeEventListener( 'beforeunload',someFunction);