IE6 не может найти элемент объекта с помощью getElementById()?

Я пытаюсь получить элемент объекта со своей веб-страницы с помощью getElementById (в конечном счете, чтобы заменить его динамически созданным элементом объекта), но он возвращает null в IE6.

В следующем коде функция byId() возвращает null в IE, но [object HTMLObjectElement] в Firefox 3, а функция lengthOfByTagName() возвращает 0 в IE и 1 в Firefox.

Есть ли что-то, что я делаю неправильно?

<html>
<head>
<title>IE doesn't see Object element?</title>
<script type="text/javascript">
function byId()
{
    var video = document.getElementById("VideoPlayer");
    alert(video);

}
function lengthOfByTagName()
{
    var length = document.getElementsByTagName("object").length;
    alert(length);

}
</script>

</head>
<body>
    <object type="" id="VideoPlayer">
        <param name="allowScriptAcess" value="always" />
        <param name="allowfullscreen" value="true" />
        VideoPlayer element
    </object>
    <br>
    <br>
    <a href="#" onclick="javascript:byId()">getElementById("VideoPlayer")</a>
    <br>
    <a href="#" onclick="javascript:lengthOfByTagName()">getElementsByTagName("object").length</a>
</body>
</html>

person Albert    schedule 02.12.2008    source источник


Ответы (3)


Это связано с тем, как IE обрабатывает узлы ‹object› по отношению к DOM.

Поскольку вы в любом случае выполняете динамическую замену, я рекомендую вам вместо этого создать ‹div› там, где вам это нужно, и изменить innerHTML на HTML для требуемого объекта.

person annakata    schedule 02.12.2008
comment
Спасибо! Иногда я забываю, что резервное копирование и другой подход могут быть лучшим выходом. - person Albert; 02.12.2008

Я только что протестировал IE 7 и увидел поведение, как описано

Internet Explorer не ожидает свободного текста в теге <object>. Использование Debugbar в вашем образце доказало, что IE не строит правильное дерево DOM.

Вместо этого используйте этот код

<object type="" id="VideoPlayer">
    <param name="allowScriptAcess" value="always" />
    <param name="allowfullscreen" value="true" />
</object>

Он будет работать так, как ожидалось.

person Johan Buret    schedule 02.12.2008
comment
Спасибо за ваш ответ. Удаление свободного текста действительно решает проблему, но я подумал, что это правильный способ предоставить запасной контент, если браузер не понимает, как отображать объектный элемент. Например, если у пользователя не установлен Flash. - person Albert; 02.12.2008

В IE6 это может не работать. Для справки: https://msdn.microsoft.com/en-us/library/ie/ms536437%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396журнал

В большинстве случаев рекомендуется использовать jQuery.

jQuery

var video = $("#VideoPlayer");

alert(video);

Попробуйте это в своей кодировке.

person HTML5 developer    schedule 11.03.2015