Es posible que Internet Explorer no devuelva el mismo DISPID para la misma propiedad

Importante

La aplicación de escritorio Internet Explorer 11 está retirada y sin soporte a partir del 15 de junio de 2022 para determinadas versiones de Windows 10.

Todavía puede acceder a sitios antiguos heredados que requieren Internet Explorer con el modo Internet Explorer en Microsoft Edge. Obtenga más información.

La aplicación de escritorio Internet Explorer 11 se redirigirá progresivamente al explorador Microsoft Edge, más rápido y seguro. En última instancia, se deshabilitará a través de Windows Update. Deshabilite IE hoy.

En este artículo se proporciona información sobre cómo resolver Internet Explorer puede que no devuelva lo mismo DISPID con la misma propiedad.

Versión del producto original:   Internet Explorer 9 y versiones posteriores
Número KB original:   2855169

Síntomas

Imagine escenario en el que una aplicación usa un comportamiento binario para definir una propiedad personalizada (vamos a llamarlo MyProp). El comportamiento binario se adjunta a un elemento que se ejecuta en el modo estándar de DOM Internet Explorer 9 o superior. El cliente también puede estar ejecutando otros comportamientos binarios, controles ActiveX, u otros complementos del explorador, que llaman para IDispatch::GetIDsOfNames resolver la DISPID MyProp propiedad. En cierta situación, Internet Explorer no siempre devuelve lo mismo para cada llamada cuando se ejecuta en el modo estándar de DISPID GetIDsOfNames Internet Explorer 9 o posterior.

Solución

Una forma de solucionar este problema es obtener acceso primero a la propiedad personalizada antes de MyProp llamar desde un complemento del JavaScript IDispatch::GetIDsOfNames explorador. Un ejemplo de esto es usar la siguiente función en el evento onload del cuerpo de la página web:

function foo()
{
    var a = document.getElementById("myelem");  // myelem is the id of the element which has the attached binary behavior
    if (a.myprop == null)  // myprop is the property in question
        //alert("null");
        ;
    else
        //alert("not null");
        ;
}