如何在IE中使用JavaScript动态添加<object>标签?

3
我必须使用JavaScript为Firefox添加嵌入式标签(embed tag)或者为Internet Explorer添加对象标签(object tag),以便根据浏览器来调用相应的ActiveX / Plugin。在某些情况下,插件可能会缺失,需要进行下载。动态添加的嵌入式标签用于Firefox可以按预期工作。但是,动态添加的对象标签对于Internet Explorer似乎没有任何效果。对象标签需要以下属性才能正常使用: id ="SomeId" classid = "CLSID:{GUID}" codebase = "http://www.MyActicexSource.com/MyCuteActivex.CAB#Version=2,0,0,1" 即使是一个一般的工作思路或方法也是不错的。
感谢!
3个回答

13

我需要做同样的事情,只需在JavaScript中将OBJECT标记所需的所有HTML放入字符串中,并简单地用OBJECT HTML替换div标记的innerHTML,它可以在IE中正常工作。

// something akin to this:
document.getElementById(myDivId).innerHTML = "<OBJECT id='foo' classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95'.....etc";

这个应该可以用,我用它来在页面中嵌入Windows Media Player。


更新:您需要在页面加载完成后通过事件处理程序运行上述代码,该事件处理程序可以在页面的load事件或者响应于用户单击等事件中运行。您唯一需要做的就是创建一个空的DIV标签或者其他允许我们通过该元素的innerHTML属性注入HTML代码的标签。


更新:显然您需要比我想象的更多的帮助?也许这会有所帮助:

让您的BODY标签看起来像这样:<body onload="loadAppropriatePlugin()">

在您页面的某个位置,您想要加载这个东西,请使用一个空的DIV标签,并且为其设置一个类似于“Foo”的ID属性。

<head>部分的<script>标签中添加如下代码:

function getIEVersion() { // or something like this
   var ua = window.navigator.userAgent;
   var msie = ua.indexOf("MSIE ");
   return ((msie > 0) ? parseInt(ua.substring(msie+5, ua.indexOf(".", msie))) : 0);
}

function loadAppropriatePlugin() {
    if(getIEVersion() != 0) { // this means we are in IE
        document.getElementById("Foo").innerHTML = "<OBJECT id='foo' classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95'.....etc";
    } else {
        // if you want to maybe do the same for FF and load that stuff...
    }
}

这有帮助吗?


首先,感谢您的快速回复。我想问题出在我需要的真正动态上。这只是一个页面,其中包含不同的部分。其中一个部分在IE中运行时需要ActiveX,在Firefox中运行时需要插件。因此,我必须在页面加载后注入代码。 - Detlef D. Doerscheln
哎呀,一个空的DIV标签。这是不是很尴尬啊? :-) 好吧,我不是Web开发人员,所以有时会问一些有趣的问题并提出有趣的解决方案。非常感谢! - Detlef D. Doerscheln
没问题,我没注意到你在我添加其他内容时将其标记为答案,所以请忽略它。 :) - Jason Bunting

1
var object = document.createelement('object')
object.setAttribute('id','name')
object.setAttribute('clssid','CLSID:{}')

对于其他参数也是同样的情况。


最后需要加上document.getElementById('parent').appendChild(object)吗? - tammuz

-5

有两种方法。

1)只需在任何位置执行 document.write

<script type="text/javascript">
<!--
   document.write("<object id=\"SomeId\" classid=\"CLSID:{GUID}\" codebase=\"http://www.MyActicexSource.com/MyCuteActivex.CAB#Version=2,0,0,1\"></object>");
-->
</script>

2) 编辑标签的innerHTML属性。

<div id="my-div"></div>
<script type="text/javascript">
<!--
   document.getElementById("my-div").innerHTML = "<object id=\"SomeId\" classid=\"CLSID:{GUID}\" codebase=\"http://www.MyActicexSource.com/MyCuteActivex.CAB#Version=2,0,0,1\"></object>";
-->
</script>

编辑:请注意,最好不要使用JavaScript来完成此操作,因为启用JavaScript的用户将永远看不到该对象。最好将其直接放置在HTML中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接