Objektelement-Fallback wird auf das DOM angewendet

Wenn ein object-Element über Fallbackinhalte verfügt (meist ein embed-Element), werden diese Inhalte von Windows Internet Explorer 9 jetzt analysiert und in das Dokumentobjektmodell (DOM) eingefügt, während dies bei vorherigen Versionen von Windows Internet Explorer nicht der Fall ist. Aufgrund dieser Verhaltensänderung wird die Behandlung dieser Elemente durch Internet Explorer 9 stärker an der Einhaltung von Standards und der Interoperabilität ausgerichtet.

Wenn ein object-Element über dasselbe Namensattribut wie eines seiner Fallbackelemente verfügt, wird von window["myName"] daher jetzt eine Auflistung aller Elemente mit dem Namen "myName" zurückgegeben. Seiten, für die davon ausgegangen wird, dass Internet Explorer anstelle einer Auflistung ein einzelnes Element zurückgibt (meist das object-Element), können eine Ausnahme verursachen, wenn für den zurückgegebenen Wert auf Methoden und Eigenschaften zugegriffen wird.

Wenn Sie dasselbe Namensattribut für ein object-Element wie für die Fallbackinhalte verwenden und versuchen, mit window["myPlugin"] einen Verweis auf das instanziierte Plug-In abzurufen, wird mehr als ein Element zurückgegeben. Für vorherige Versionen von Internet Explorer wurde dagegen nur das object-Element zurückgegeben.

Sehen wir uns beispielsweise das folgende Skript und Markup an:

Markup


<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="myPlugin" 
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
  <param name="movie" value="myflash.swf" />
  <embed src="myflash.swf" name="myPlugin" type="application/x-shockwave-flash"
    pluginspage="http://www.adobe.com/go/getflashplayer"></embed>
</object>

JavaScript


plugin = window["myPlugin"]; //the OBJECT element in IE8, a collection of the OBJECT and 
EMBED elements in IE9
plugin.style.display = "none";  //Causes an exception in IE9: "SCRIPT5007: Unable to set 
value of the property ‘display’: object is null or undefined"

In Windows Internet Explorer 8 wird von window["myPlugin"] nur das object-Element zurückgegeben (weil die Fallbackinhalte von Internet Explorer 8 nicht in das DOM eingefügt wurden).

In Internet Explorer 9 wird das embed-Element in das DOM eingefügt, sodass von window["myPlugin"] eine Auflistung der Elemente object und embed zurückgegeben wird. Für dieses Verhalten besteht Interoperabilität mit anderen Browsern, und die Einhaltung von Standards ist sichergestellt.

Verwenden Sie document["myPlugin"] anstelle von window["myPlugin"], wenn Sie das instanziierte Plug-In erwarten. Von document["myPlugin"] wird kein Abgleich von Fallbackelementen durchgeführt, wenn das übergeordnete Element instanziiert wird.


plugin = document["myPlugin"]; //the instantiated plugin: OBJECT element in IE, 
EMBED element in browsers which use the Netscape plugin model

Weitere Details:

In Vorabversionen von Internet Explorer 9 wird von document["myPlugin"] das embed-Element und von window["myPlugin"] eine HTML-Auflistung der Elemente object und embed aus dem obigen Beispiel zurückgegeben.

Auf vielen Websites lässt sich jedoch das folgende gängige Codierungsmuster beobachten:


if(document["myPlugin"]) {
     plugin = document["myPlugin"]; //expected to be the object element in Internet Explorer and embed element in other browsers
}

Zur Unterstützung der Websitekompatibilität verfügt Internet Explorer 9 über ein verbessertes Verhalten für document["myName"]. Sofern das Laden des Plug-Ins erfolgreich ist, wird das instanziierte Plug-In zurückgegeben (im obigen Beispiel das object-Element). Dies stimmt im Wesentlichen mit der Rückgabe von Internet Explorer 8 überein, wobei für die Fallbackinhalte jedoch trotzdem die Analyse unter Einhaltung der Standards möglich ist. Dieses Verhalten führt dazu, dass für das obige Codierungsmuster in allen bekannteren Browsern Interoperabilität besteht.

window["myName"] bleibt gegenüber den Vorabversionen von Internet Explorer 9 unverändert und sollte nur verwendet werden, wenn zu erwarten ist, dass mehr Elemente als nur instanziierte Elemente abgeglichen werden. In der folgenden Tabelle ist beschrieben, wie diese APIs in Internet Explorer 9 funktionieren.

window["xyz"] gibt Folgendes zurück:document["xyz"] gibt Folgendes zurück:
  • embed- oder object-Elemente, die angezeigt werden und "xyz" als name oder id aufweisen, or
  • embed- oder Fallback-freie object-Elemente, für die kein Objektvorgänger angezeigt wird und die "xyz" als name oder id aufweisen, or
  • object-Elemente, für die ein Vorgänger angezeigt oder nicht angezeigt wird und die "xyz" als name oder id aufweisen, or
  • applet-, form-, iframe- oder img-Elemente, die "xyz" als name aufweisen, or
  • applet-Elemente, die "xyz" als id aufweisen, or
  • img-Elemente, die "xyz" als id aufweisen und außerdem über ein name-Inhaltsattribut verfügen

 

Ein object-Element wird als "Fallback-frei" bezeichnet, wenn es keine object- oder embed-Nachfolger hat.

Verwandte Themen

 

 

Anzeigen:
© 2015 Microsoft