对象元素回退适用于 DOM

object 元素含回退内容(通常是 embed 元素)时,Windows Internet Explorer 9 会解析此内容,并且将其包含在文档对象模型 (DOM) 中,之前版本的 Windows Internet Explorer 不会执行此操作。 此行为更改使 Internet Explorer 9 处理这类元素的方式更符合标准,并且更具有互操作性。

因此,如果 object 元素与其任意一个回退元素具有相同的名称属性,则 window["myName"] 现在会返回所有具有名称 "myName" 的元素的集合。 与返回集合相反,在访问关于返回值的方法和属性时,假定 Internet Explorer 会返回单个元素(通常是 object 元素)的页面可能导致出现异常。

如果像对回退内容一样使用与 object 元素相同的名称属性,并且尝试检索对使用 window["myPlugin"] 的实例化插件的引用,则会返回多个元素,而之前版本的 Internet Explorer 中仅会返回 object 元素。

例如,考虑下面的脚本和标记:

标记


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

在 Windows Internet Explorer 8 中,window["myPlugin"] 仅会返回 object 元素(因为 Internet Explorer 8 没有在 DOM 中包含回退内容)。

在 Internet Explorer 9 中,DOM 中包含 embed 元素,因此 window["myPlugin"] 会返回 objectembed 元素的集合。此行为可以与其他浏览器互操作,并且符合标准。

如果期望实例化插件,则使用 document["myPlugin"](而不是 window["myPlugin"])。实例化父对象时,document["myPlugin"] 不会匹配回退元素。


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

更多详细信息

对于预发行版的 Internet Explorer 9,在上述示例中,document["myPlugin"] 返回 embed 元素,window["myPlugin"] 则返回 objectembed 元素的 HTML 集合。

不过,在大量站点中可以观察到下列常见编码模式:


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

为了帮助提高站点的兼容性,Internet Explorer 9 已改善 document["myName"] 的行为。 如果插件加载成功,则它会返回实例化插件(在上述示例中,这就是 object 元素)。这会有效地匹配 Internet Explorer 8 返回的内容,同时能够以标准的方式解析回退内容。 此行为使上述编码模式可以在所有主流浏览器中实现互操作。

window["myName"] 在预发行版的 Internet Explorer 9 中保持不变,而且只能在需要不仅仅是匹配实例化元素时使用。下图显示这些 API 如何在 Internet Explorer 9 中工作。

window["xyz"] 返回document["xyz"] 返回

 

如果 object 元素没有 objectembed 子元素,则会将其视为无回退的元素。

相关主题

 

 

显示:
© 2015 Microsoft