2010-04-16 3 views
21

Ich benutze prototype.js für meine Web-App, und ich habe alles auf Chrome, Safari und Firefox laufen. Ich arbeite jetzt an IE8-Kompatibilität.Wann sollte ich JavaScript-Ereignisse in Fenster vs. Dokument vs. document.body beobachten?

Wie ich im IE debuggen, habe ich bemerkt, dass es Javascript-Ereignisse gibt, für die ich zuvor einen Beobachter auf dem Fenster, z.

Event.observe(window, eventType, function() {...}); 

(wo eventType könnte sein "dom:loaded", "keypress", etc.) und es funktioniert gut in Chrome/Safari/Firefox. Im IE wird der Beobachter jedoch nie ausgelöst.

In zumindest einigen Fällen konnte ich dies auf IE arbeiten lassen, indem ich den Beobachter auf etwas anderes als window, z. document (im Fall von "dom:loaded") oder document.body (im Fall von "keypress"). Dies ist jedoch alles Trial-and-Error.

Gibt es eine systematischere Methode, um festzustellen, wo diese Beobachter platziert werden sollen, sodass die Ergebnisse browserübergreifend kompatibel sind?

Danke!

Antwort

1

Die Objektdokumentation der verschiedenen Browser (z. B. window auf MSDN, document auf MDC) definiert, welche Ereignisse auf dem Objekt unterstützt werden. Du könntest dort anfangen.

+4

Die Docs erklären das nicht besonders gut. –

+0

Dies scheint ein guter Ort, um zu schauen, aber soweit ich das sagen kann, sind die MSDN nicht umfassend. Zum Beispiel kann man ein "onresize" -Ereignis auf dem "Fenster" registrieren, aber ich sehe es dort tatsächlich nicht aufgelistet. – brahn

+0

Das liegt daran, dass 'onresize' von' window.prototype' im IE offengelegt wird. Es ist in dem Dokument. – Alsciende

25

(Dies ist kein Super-umfassende Antwort, aber es scheint, empirisch zu erarbeiten -. So hoffentlich diese Faustregeln werden für andere hilfreich sein)

  • Im Allgemeinen registrieren Ereignisse auf document , nicht window. Webkit und mozilla-Browser scheint entweder glücklich zu sein, aber IE reagiert nicht auf den meisten Ereignisse auf dem Fenster registriert, so müssen Sie document verwenden, um mit IE

  • Ausnahme zu arbeiten: resize und Ereignisse Laden bezogen, Entladen und Öffnen/Schließen sollten alle am Fenster eingestellt werden.

  • Ausnahme von der ersten Ausnahme: muss auf document in IE eingestellt werden.

  • Eine weitere Ausnahme: Wenn Tastenanschläge unter Mozilla mit Find-as-you-type aktiviert Erkennung, stellen Sie Ihren Schlüsselereignis Beobachter auf der window, nicht die document. Wenn Sie Letzteres tun, scheint der Find-as-you-type das Ereignis zu blockieren.

+0

Gibt es zufällig ein Update zu dieser Frage? –

Verwandte Themen