2012-04-11 5 views
0

window.documentは、あるURLから別のURLに移動するときや、document.reload(true)を呼び出すときなど、頻繁に変更されなくなります。Javascript。 window.documentがいつ変更されたかを検出するには?

ドキュメント自体には、完全なreadyStateと、変更を追跡するreadystatechangeイベントがあります。しかし、readyStateイベントのためにドキュメントにaddEventListenerを置いてドキュメントが更新された場合、addEventListenerはもう存在しないので、メソッドは呼び出されません。

私は、ドキュメントがウィンドウオブジェクト内で更新されるたびに添付したいと思います。だからそれを検出する方法はありますか?

答えて

3

各ページがロードされるたびにスクリプトがイベントハンドラを再インストールできるように、各Webページに独自のJavaScriptを用意するか、すべての単一ページを監視できるブラウザプラグインから実行する必要がありますそれがロードされると同時に。

新しいページが読み込まれると、ページのすべてのスクリプトがクリアされるため、あるページのスクリプトを次のページに残すことはできません。

もう1つのアイデア:関心のあるすべてのページが同じドメインとドメイン上にある場合、子フレームを定期的に監視する親フレームを持つことができ、ドキュメントのたびにイベントハンドラをリセットし続けます変更。しかし、同じオリジンポリシーの安全性制限のため、これはすべてのフレームが同じドメイン上にある場合にのみ機能します。

0

従来のサポートを気にしないで、現在のブラウザをターゲットにしている場合は、履歴APIをチェックしてください。新しいAPIを使用すると、アドレスバーのURLが変更され、 back/fwdはJavaScriptコンテキストを更新せずに想定どおりに動作するように見えます)。

はこちらのデモをご覧ください:http://html5demos.com/history

そして、ここでそれについての詳細をお読みください。https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

+0

を私が実際にレガシーについては気にしないので、私は主にiOS版のSafari 5.1ブラウザをターゲットにしています。しかし、歴史は、私が持っている問題を解決して、window.documentが更新されたかどうかを検出しません。 – Mark

+0

ヒストリーAPIを使用すると、「更新」を無効にすることができます。さもなければ、あなたは '' beforeunload''イベントを聞くことができたと思いますが、実際にスクリプトとJSオブジェクトが発生した直後にすべて消滅してしまいます... – JKing

+0

本当にJKingが話しています。ドキュメントが実際に消去されるときに 'unload'イベントが発生しますが、実際には 'rightafterunload' ;-)イベントが必要です – Mark

関連する問題