-1

我创建了以下代码,可以在 Firefox 和 Chrome 中顺利运行。在 IE8 中,window.opener.onbeforeunload = null 行不会触发。谁能给我建议如何为 IE8 获得类似的结果,即从子窗口停用父窗口的所有先前 onbeforeunload 设置,然后更改(父)window.location?

谢谢!

// this is just the activation of the site's onbeforeunload...
jQuery(document).ready(function(){
 var preventUnloadPrompt;
 jQuery('form').live('submit', function() { preventUnloadPrompt = true; });
 window.onbeforeunload = function() {
  var rval;
  if(preventUnloadPrompt) {
   return;
  } else {
   return 'Do you want to continue?';
  }
  return rval;
 }

//Now when clicking a button on the main site, a popup is opening 
//via popup = window.open{...}. In the popup there is another 
//button "Test" which should set the parent window's onbeforeunload 
//to zero and load another website in there. The function test() is 
//defined in the header, but here it is again to make reading easier:
//function test(){window.opener.onbeforeunload = null;
//window.opener.location="http://www.google.com";}

$("#button").click(function(){
 var content = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"><head><title>Popup</title><script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js?v=1.4.4"></script><script type="text/javascript">function test(){window.opener.onbeforeunload = null; window.opener.location="http://www.google.com";}</script></head><body><div id="popup-message-stopbutton"><input type="button" value="Test" onclick="test()" /></div></body></html>';

 var popup = window.open('','', 'width="100",height="100"');
 popup.document.write(content);
 popup.document.close();
});

});

4

2 回答 2

0

尝试使用 jQuery 访问开启器并取消绑定事件,如下所示:

$(window.opener).unbind('onbeforeunload');
于 2012-10-31T08:21:44.290 回答
0

我看到这是一篇较旧的帖子,但我只是想分享一下我如何让 onbeforeunload 在父窗口中与子窗口解除绑定。希望它会帮助某人。

在父窗口的js中,写一个函数解除绑定事件

function unbindOBE(){
     $(window).unbind('beforeunload');
}

在子窗口的 js 中,只需在重新加载或分配或您拥有什么之前调用该函数。

window.opener.unbindOBE();

话虽如此,如果您尝试更改位置,

window.opener.location="http://www.google.com";

如果您使用其中一种分配或替换方法,效果会更好

window.opener.location.assign("http://www.google.com");

我没有在 IE 中尝试过这个,所以 YMMV

于 2014-01-14T01:20:27.730 回答