2012-02-11 16 views
0

明らかに、ウィンドウのアンロードイベントを認識しないため、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); 
    } 
} 
... 
+0

onunloadとunloadは異なりますか? – shaun5

+0

@ shaun5 'addEventListener()'の最初の引数は、ここでは 'unload'のイベント* type *である必要があります。 – PointedEars

答えて

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

+0

@flavour404 IE 9互換モード*とIE <9はW3C DOM Level 2+イベント。それで、私は「必要に応じてラッパーを追加する」と言ったのです。そのようなラッパーの1つは['jsx.dom.addEventListener()'](http://pointedears.de/websvn/filedetails.php?repname=JSX&path=%2Ftrunk%2Fdom%2Fevents.js)です。 – PointedEars

+0

addEventListenerではなくattachEventが、あなたがIEで必要とするものです。 –

関連する問題