Pregunta

Estoy tratando de obtener un elemento objeto de mi página web usando getElementById (en última instancia, para poder reemplazarlo con un elemento objeto creado dinámicamente) pero devuelve null en IE6.

En el siguiente código, la función byId() devuelve [object HTMLObjectElement] en IE pero un lengthOfByTagName() en Firefox 3 y la función 0 devuelve 1 en IE pero <=> en Firefox.

¿Hay algo que estoy haciendo mal?

<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>
¿Fue útil?

Solución

Esto se debe a la forma en que IE trata a < object > nodos frente al DOM.

Dado que de todos modos está reemplazando dinámicamente, le recomiendo que cree un < div > donde lo necesite y cambie el innerHTML para que sea el HTML del objeto que necesita.

Otros consejos

Acabo de probar en IE 7 y vi el comportamiento como se describe

Internet Explorer no espera texto libre en una etiqueta <object>. El uso de Debugbar en su muestra demostró que IE no construye el árbol DOM correcto.

Use este código en su lugar

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

Funcionará como se esperaba.

En IE6, puede no funcionar. Para consultar: https://msdn.microsoft.com/en-us/library/ie/ms536437%28v=vs.85%29.aspx?f=255 & amp; MSPPError = -2147217396 revista

Sugerir el uso de jQuery para manejar la mayoría de los casos

jQuery

var video = $("#VideoPlayer");

alert(video);

Prueba esto en tu codificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top