2012-04-11 11 views
0

Das window.document wird häufig geändert, z. B. wenn Sie von einer URL zur anderen wechseln oder wenn Sie document.reload aufrufen (true);Javascript. Wie erkennt man, wenn sich das window.document geändert hat?

Das Dokument selbst verfügt über einen readyState, der perfekt ist und ein repeatstatechange-Event ist, um Änderungen zu verfolgen. Wenn Sie jedoch einen addEventListener für das readyState-Ereignis in das Dokument einfügen und das Dokument erneuert wird, ist der addEventListener nicht mehr vorhanden und die Methode wird nie aufgerufen.

Ich möchte also jedes Mal, wenn das Dokument in dem Fensterobjekt erneuert wird, eins anhängen. Gibt es eine Möglichkeit, das zu erkennen?

Antwort

3

Sie müssten entweder Ihr eigenes Javascript in jeder Webseite haben, damit das Skript den Event-Handler neu installieren kann, wenn jede Seite geladen wird, oder Sie müssten dies über ein Browser-Plug-in tun, das jede einzelne Seite überwachen kann wie es geladen ist.

Etwas per Definition werden alle Skripte von einer Seite gelöscht, wenn eine neue Seite geladen wird, so dass es nicht möglich ist, dass ein Skript von einer Seite in die nächste Seite übergeht. Eine andere Idee: Wenn sich alle Seiten von Interesse in der gleichen Domäne und in Ihrer Domäne befinden, könnte es möglich sein, einen übergeordneten Rahmen zu haben, der den untergeordneten Rahmen regelmäßig überwacht und immer einen Ereignishandler darauf zurücksetzt Änderungen. Aufgrund der Sicherheitseinschränkungen der gleichen Ursprungsrichtlinie konnte dies jedoch nur funktionieren, wenn sich alle Frames in derselben Domäne befanden.

0

Wenn Sie auf aktuelle Browser abzielen und sich nicht um ältere Unterstützung kümmern, lesen Sie die Verlaufs-API, da Sie dem Benutzer so erscheinen können, dass er auf neue Seiten wechselt (die URL in der Adressleiste ändert sich und back/fwd scheint so zu funktionieren, wie sie gedacht sind), ohne Ihren JavaScript-Kontext zu aktualisieren.

eine Demo Siehe hier: http://html5demos.com/history

Und hier lesen Sie mehr darüber: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history

+0

Ich bin in erster Linie die iOS Safari 5.1 Browser-Targeting so dass ich in der Tat nicht über das Erbe kümmern. Jedoch wird die Geschichte das Problem, das ich habe, nicht beheben und feststellen, ob das window.document erneuert wird. – Mark

+0

die Geschichte API würde Sie _override_ Dokument "Erneuerung" lassen. Ansonsten könntest du auf das Ereignis "beforeunload" warten, aber es wird nicht wirklich wichtig sein, denn deine Skripte und alle JS-Objekte werden gleich gelöscht, nachdem es passiert ist ... – JKing

+0

In der Tat, JKing sprichst du jetzt . Das 'unload' -Event wird ausgelöst, wenn das Dokument gelöscht wird, aber ich möchte das Ereignis 'rightafterunload' ;-); – Mark