Sicher, universal, Weg, um addEventHandler in Javascript?
Bevor ich in die details von diesem problem, würde ich mag, um die situation klar. Unsere web-analytics-Unternehmen und arbeitet als Berater für große Websites, und (anders als das hinzufügen einer einzigen SCRIPT-tag) wir haben keine Kontrolle über die Seiten selbst.
Unserer bestehenden Skript installiert Handler mit "alten" Weg (eine schicke version von element.onclick = blabla; das führt gleichzeitig die original-handler), die keine Ahnung von "neuen" (addEventListener oder attachEvent) - Handler auf der Seite. Wir möchten dieses Problem zu beheben, um unser Skript ausführen können, auf mehrere Standorte, ohne dass da viel kundenspezifische Entwicklung.
Der erste Gedanke war hier, in unserem eigenen Skript, verwenden Sie die addEventListener/attachEvent, aber dies stellt ein problem: der client-Seite setzt einen handler mit dem "alten" Weg, es würde wischen Sie die handler installiert, der "neue" Weg. Quick-and-dirty-Tests zeigt dies geschieht sowohl IE7 und FF3, obwohl ich bisher nicht testen Sie die ganze Palette von Browsern. Auch besteht die Gefahr, dass, wenn wir die "neue" Art und Weise nach der Seite event-Handler bereits gesetzt sind, könnten wir löschen Sie Ihren Handler.
Also meine Frage ist: was sichere Methode kann ich verwenden, um fügen Sie einen event-handler in Javascript mit addEventListener/attachEvent das funktioniert unabhängig davon, wie andere event-Handler auf der Seite sind installiert?
Bitte denkt daran: wir haben keine Möglichkeit, eine änderung der Website, dass unser Skript installiert ist. (Ich muss betonen, dass, weil die Standard-Antwort auf Fragen wie diese, ist immer, "nur umschreiben der Seite, alles zu tun, die gleiche Weise.")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, Ihren quick-and-dirty-Test wieder? Dies passiert aber nicht bei mir im FF3.
Beide Handler Feuer für mich, wenn ich Sie auf das element.
Ich vermute, du hast vergessen die final boolean-argument in
addEventListener
(ob die capture-phase). Ich bin auch vermute du hast vergessen, dass der IE istattachEvent
mussonclick
, nichtclick
.addEventListener/attachEvent ist sicher in einem gewissen Sinn Sie zu Fragen. Fügen Sie einen neuen event-handler, um einen Knoten zu verändern, ohne alle Handler, die zuvor Hinzugefügt, um es (auch nach der Zuweisung durch ein onxxx-Eigenschaft). Für ein Unternehmen, das bringen einige auf eine ausländische Seite mit addEventListener/attachEvent werden müssen, die nur in der Praxis. Zuweisen von onxxx-handler über die Eigenschaften in der Tat brechen würde-hosting-Seiten-Skipte (, die zuvor zugewiesen der gleichen Weise)