Javascript 向safari添加事件侦听器

Javascript 向safari添加事件侦听器,javascript,safari,Javascript,Safari,我试图通过Safari浏览器的JavaScript添加一个事件监听器,因为它显然无法识别窗口的卸载事件。到目前为止,我已经: function init() { //add unload event handler for safari if (navigator.userAgent.toLowerCase().indexOf("safari")!=-1) { bodyElt = document.getElementsByTagName("body")[0]; if (bod

我试图通过Safari浏览器的JavaScript添加一个事件监听器,因为它显然无法识别窗口的卸载事件。到目前为止,我已经:

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);
    }
}
...

请不要使用浏览器嗅探。以下内容符合标准,适用于任何地方(如果有W3C DOM支持,请根据需要添加包装器):

…
功能负重()
{
document.body.addEventListener(“unload”,onUnloadHandler,false);
}
…
…

但问题依然存在。为什么不首先使用
body
元素的
onunload
属性?您需要
卸载事件侦听器做什么?许多人认为他们需要
unload
监听器,因为他们没有正确处理闭包,或者有一种错误的想法,就是试图让访问者留在他们的站点。

这不是onload还是unload?@shaun5
addEventListener()
的第一个参数需要是事件类型,即
unload
。实际上,从你的语气中我立刻感到内疚,并加载了代码,即抛出错误文档。body不支持addEventListener…@flavour404 IE 9处于兼容模式,IE<9不支持W3C DOM Level 2+事件。这就是为什么我说“根据需要添加包装”。一个这样的包装应该是。attachEvent而不是addEventListener是您在IE中需要的,您提到错误。@FSC否,请阅读“”,也在我的包装代码中提到。
    …

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

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

…