Los clientes de control WebBrowser comparten la configuración global

Importante

La aplicación de escritorio de Internet Explorer 11 se retirará y se retirará de la compatibilidad el 15 de junio de 2022 (para obtener una lista de lo que está en el ámbito, vea las preguntas más frecuentes). Las mismas aplicaciones y sitios de IE11 que usas hoy pueden abrirse en Microsoft Edge con el modo de Internet Explorer. Obtenga más información aquí.

En este artículo se proporcionan métodos para implementar la configuración global para compartir clientes de control WebBrowser reemplazando el método OnAmbientProperty de la clase basada en CWnd de hospedaje.

Versión del producto original:   Internet Explorer
Número KB original:   183412

Síntomas

Todos los hosts del control WebBrowser comparten la misma configuración global de Internet.

Solución

Para la mayoría de la configuración global de Internet, no hay ningún método compatible para guardar automáticamente un conjunto de propiedades para cada host WebBrowser.

Sin embargo, determinadas opciones de descarga, como si se va a descargar ActiveX o no, se pueden invalidar y especificar por host.

Estado

Este comportamiento es una característica del diseño de la aplicación.

Más información

Como se documenta en el SDK de cliente de Internet (InetSDK), los hosts webBrowser pueden implementar la propiedad ambient de DISPID_AMBIENT_DLCONTROL en su interfaz de distribución predeterminada para invalidar la configuración global de las opciones de descarga.

El ejemplo WALKALL del InetSDK (\InetSDK\Samples\Walkall) muestra esta técnica para un host MSHTML. Se puede usar un método similar en hosts WebBrowser para lograr el mismo efecto.

MSHTML también pedirá un nuevo agente de usuario mediante DISPID_AMBIENT_USERAGENT al navegar a hipervínculos en los que se ha hecho clic. Esta propiedad ambient se puede invalidar, pero no se usa al llamar mediante programación al método Navigate. Tampoco hará que se altere la propiedad del objeto navigator del DOM o del comportamiento clientInformation: esta propiedad siempre reflejará la cadena userAgent UserAgent de Internet Explorer.

Un host MFC del control WebBrowser puede afectar fácilmente a estas propiedades de entorno reemplazando el método OnAmbientProperty de la clase basada en CWnd de hospedaje:

BOOL CWBHostView::OnAmbientProperty(COleControlSite* pSite,
                                    DISPID dispid, VARIANT* pvar)
{
USES_CONVERSION;
    // Change download properties - no java, no scripts...
    if (dispid == DISPID_AMBIENT_DLCONTROL)
    {
        pvar->vt = VT_I4;
        pvar->lVal = DLCTL_NO_SCRIPTS | DLCTL_NO_JAVA
                   | DLCTL_NO_RUNACTIVEXCTLS | DLCTL_NO_DLACTIVEXCTLS;

        return TRUE;
    }

    // Change user agent for this web browser host during hyperlinks
    if (dispid == DISPID_AMBIENT_USERAGENT)
    {
        CString strUserAgent("MyWebBrowserHost");

        pvar->vt = VT_BSTR;
        pvar->bstrVal = ::SysAllocString(T2OLE(strUserAgent));

        return TRUE;
    }

    return CView::OnAmbientProperty(pSite, dispid, pvar);
}

Los DISPID_AMBIENT_ _ y *DLCTL*** se definen en Mshtmdid.h (\InetSDK\Include\MSHTMDID. H).

Referencias

Para obtener más información acerca del desarrollo de soluciones basadas en web para Microsoft Internet Explorer, vea Internet Explorer mode y DevTools.