Как я могу динамически добавить тег <object>с JavaScript в IE? - PullRequest
3 голосов
/ 11 ноября 2008

Мне нужно добавить тег вставки для Firefox или тег объекта для Internet Explorer с JavaScript, чтобы адресовать соответствующий ActiveX / плагин в зависимости от браузера. Плагин может отсутствовать и должен быть загружен в этом случае. Динамически добавленный тег встраивания для Firefox работает, как и ожидалось. Динамически добавленный объектный тег для Internet Explorer, похоже, ничего не делает. Для правильной работы тегу объекта необходимы следующие атрибуты.

id ="SomeId" classid = "CLSID:{GUID}" codebase = "http://www.MyActicexSource.com/MyCuteActivex.CAB#Version=2,0,0,1"

Даже общая рабочая идея или метод были бы хорошими.

Спасибо!

Ответы [ 3 ]

13 голосов
/ 11 ноября 2008

Мне нужно было сделать то же самое и просто поместить весь HTML-код, необходимый для тега OBJECT, в строку в JavaScript и просто заменить innerHTML тега div на HTML-код OBJECT, и он прекрасно работает в IE.

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

Это должно сработать, у меня все нормально - я использую его для встраивания проигрывателя Windows Media в страницу.


ОБНОВЛЕНИЕ: Вы должны запустить приведенный выше код после загрузки страницы через обработчик событий, который либо запускается при событии загрузки страницы, либо, возможно, в ответ на щелчок пользователя. Единственное, что вам нужно сделать, это иметь пустой тег DIV или тег другого типа, который позволил бы нам вводить HTML-код через свойство innerHTML этого элемента.


ОБНОВЛЕНИЕ: Очевидно, вам нужна больше помощи, чем я думал, что вам нужно? Может быть, это поможет:

Ваш тег BODY должен выглядеть следующим образом: <body onload="loadAppropriatePlugin()">

Есть где-нибудь на вашей странице, где вы хотите, чтобы эта вещь загружалась, пустой тег DIV с атрибутом id чего-то вроде "Foo" или чего-то еще.

У вас есть такой код в теге <script> в разделе <head>:

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...
    }
}

Это помогает?

1 голос
/ 03 мая 2010
var object = document.createelement('object')
object.setAttribute('id','name')
object.setAttribute('clssid','CLSID:{}')

И то же самое для других параметров.

0 голосов
/ 11 ноября 2008

Два пути.

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.

...