O fallback de elementos de objeto se aplica ao DOM

Quando um elemento object tem um conteúdo de fallback (normalmente, um elemento de embed), o Windows Internet Explorer 9 agora analisa esse conteúdo e o inclui no DOM (Modelo de Objeto de Documento), quando as versões do Windows Internet Explorer não faziam isso. Essa mudança de comportamento torna o manuseio desses elementos do Internet Explorer 9 mais compatíveis com padrões e interoperáveis.

Como resultado, se um elemento object tem o mesmo atributo de nome que vários elementos de fallback, então window["myName"] não retornará uma coleção de todos os elementos com o nome "myName". As páginas as quais consideram que o Internet Explorer retornará um único elemento (normalmente, o elemento object) diferente de um coleção podem causar uma exceção ao acessar métodos e propriedades no valor retornado.

Se você usar o mesmo atributo de nome para um elemento object da mesma forma para o conteúdo de fallback e tentar recuperar uma referência para o plug-in instanciado usando window["myPlugin"], mais de um elemento será retornado, onde somente o elemento object foi retornado em versões anteriores do Internet Explorer.

Por exemplo, considere o seguinte script e marcação:

Marcação


<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"

No Windows Internet Explorer 8, window["myPlugin"] retorna apenas o elemento object (pois o Internet Explorer 8 não incluía o conteúdo de fallback no DOM).

No Internet Explorer 9, o elemento embed é incluído no DOM e, portanto, window["myPlugin"] retorna uma coleção de elementos object e embed. Esse comportamento é interoperável com outros navegadores e é compatível com os padrões.

Ao esperar o plug-in instanciado, use o document["myPlugin"] em vez de window["myPlugin"]. O document["myPlugin"] não corresponderá aos elementos de fallback quando o pai é instanciado.


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

Detalhes adicionais:

Em versões pré-versão do Internet Explorer 9, document["myPlugin"] retornava o elemento embed e window["myPlugin"] retornava uma coleção HTML dos elementos object e embed no exemplo acima.

No entanto, o seguinte padrão de código comum foi observado em vários sites:


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

Para ajudar na compatibilidade do site, o Internet Explorer 9 tem um comportamento melhorado para document["myName"]. Considerando que o plug-in carrega com êxito, ele retorna o plug-in instanciado (no exemplo acima, o elemento object). Isso corresponde efetivamente ao que o Internet Explorer 8 retornou, ao mesmo tempo ainda permitindo a análise compatível com padrões do conteúdo de fallback. Esse comportamento permite que o padrão de código acima seja interoperável com todos os principais navegadores.

window["myName"] permanece inalterado desde versões pré-lançamento do Internet Explorer 9 e devem ser usadas apenas ao esperar corresponder mais do que apenas os elementos instanciados. A tabela a seguir descreve como essas APIs funcionam no Internet Explorer 9.

window["xyz"] retornadocument["xyz"] retorna
  • Elementos embed ou object que estão aparecendo e têm um name ou id de "xyz", or
  • Elementos embed ou elementos object sem fallback, sem ancestral de objeto exibido e com name ou id de "xyz", or
  • Elementos object que aparecem ou não têm ancestral exibido e com name ou id do "xyz", or
  • Elementos applet, form, iframe ou img com name de "xyz", or
  • Elementos applet com um id de "xyz", or
  • Elementos img com um id de "xyz" e que também têm um atributo de conteúdo name presente

 

Um elemento object está sem fallback se não tiver descendentes object ou embed.

Tópicos relacionados

 

 

Mostrar:
© 2014 Microsoft