如何检测窗口(新标签)关闭事件?

时间:2010-07-06 09:40:33

标签: javascript tabs

我有一个父页面和子页面。子页面在新标签页中打开

当我关闭子选项卡时,我想显示一条警告消息(子页面正在关闭)
关闭标签时如何显示关闭的杂物? (不刷新时间)

我使用 onunload onbeforeunload
当页面刷新和制表符关闭时,也会调用两种方法。

window.onunload = function doUnload(e)
{
  alert('Child window is closing...'); 
}

window.onbeforeunload = function doUnload(e)
{
  alert('Child window is closing...'); 
}

我必须在浏览器中显示警告消息,只有关闭标签

帮帮我。 提前谢谢。

更新

我使用以下脚本。它在IE中工作。但是没有在FireFox中使用

  <script language="javascript" type="text/javascript">          

  window.onbeforeunload = function()
  {   
      if ((window.event.clientX < 0) || (window.event.clientY < 0) || (window.event.clientX < -80)) 
     {            
          alert("Child window is closing...");  
     }   
 };   

</script>

如何在FireFox和其他浏览器中实现此功能。

4 个答案:

答案 0 :(得分:1)

afaik从来就不是一个跨浏览器脚本。解决方案是不依赖于特定浏览器的未记录和可更改的功能来检测重要的内容。

由于您有一个CHILD页面,您可以在父(开场)中设置一个测试,该测试会间隔测试childWindowHandle.closed属性并对其进行操作。

答案 1 :(得分:1)

http://chrismckee.co.uk/good-sir-before-you-unload-crossbrowser-javascript-headaches/的脚本是否有效?

假设你刚刚试图在启动事件之前触发事件,那么这就是它(不包括歌剧)

try{
    // http://www.opera.com/support/kb/view/827/
    opera.setOverrideHistoryNavigationMode('compatible');
    history.navigationMode = 'compatible';
}catch(e){}

//Our Where The F' Are You Going Message
function ReturnMessage()
{
    return "WTF!!!";
}

//UnBind Function
function UnBindWindow()
{
    window.onbeforeunload = null;
    return true;
}

//Bind Links we dont want to affect
document.getElementById('homebtn').onclick = UnBindWindow;
document.getElementById('googlebtn').onclick = UnBindWindow;

//Bind Exit Message Dialogue
window.onbeforeunload = ReturnMessage;

答案 2 :(得分:0)

Mozilla Devloper site中有一个例子,主要是检查浏览器类型 并相应地使用以下检查。希望这有帮助。

答案 3 :(得分:0)

除了一些基于cookie的方法(非持久性cookie等开发工作)之外,您可能无法做到这一点。第二个标识页面刷新,基于表单的重定向,或返回重定向或浏览器关闭卸载事件标识不是直接的,并且是乏味的。建议不要依赖它。

在客户关闭标签之前,您可以做一些小事。 javascript detect browser close tab/close browser但是如果您的操作列表很大并且标签在完成之前关闭,那么您将无能为力。你可以尝试一下,但根据我的经验,不要依赖它。是的,此时您无法区分回来并刷新和关闭。因此,没有万无一失的方式来说明孩子是否已经完全关闭。

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";
  /* Do you small action code here */
  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});

https://developer.mozilla.org/en-US/docs/Web/Reference/Events/beforeunload?redirectlocale=en-US&redirectslug=DOM/Mozilla_event_reference/beforeunload