2012-02-11 65 views
0

我想添加一个事件监听器,通过Safari浏览器的JavaScript,因为它不能识别窗口的卸载事件,显然。到目前为止,我有:添加一个事件监听器到safari

function init() 
{ 
//add unload event handler for safari 
if (navigator.userAgent.toLowerCase().indexOf("safari")!=-1) { 
    bodyElt = document.getElementsByTagName("body")[0]; 
    if (bodyElt) { 
     bodyElt.addEventListener("unload", onUnloadHandler, false); 
    } 
} 
... 
+0

是不是onunload与卸载? – shaun5 2012-02-11 01:13:52

+0

@ shaun5 addEventListener()的第一个参数需要是事件*类型*,这里是'unload'。 – PointedEars 2012-02-11 01:25:33

回答

0

请不要使用浏览器嗅探。以下是符合标准和工作到处(如果有W3C DOM支持;根据需要添加包装):

… 

    <script type="text/javascript"> 
     function bodyLoad() 
     { 
     document.body.addEventListener("unload", onUnloadHandler, false); 
     } 
    </script> 
    </head> 

    <body onload="bodyLoad()"> 
    … 
    </body> 

… 

问题依然存在,虽然。为什么您首先不使用body元素的onunload属性?你需要什么unload事件监听器?许多人认为他们需要unload听众,因为他们没有正确处理关闭,或者有误导的想法试图让访问者留在他们的网站。

+0

实际上,我感到从你的语气立即内疚,并加载了代码,IE抛出错误document.body不支持addEventListener ... – flavour404 2012-02-11 01:46:53

+0

@ flavour404 IE 9 in *兼容模式*和IE <9不支持W3C DOM Level 2+活动。这就是为什么我说“必要时添加包装”。一个这样的包装会是['jsx.dom.addEventListener()'](http://pointedears.de/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fdom%2Fevents.js)。 – PointedEars 2012-02-11 02:15:49

+0

attachEvent而不是addEventListener是你在IE中需要提到的错误。 – 2014-03-15 14:14:55