Los clientes de control WebBrowser comparten la configuración global

Advertencia

Se ha programado la deshabilitación permanente de la aplicación de escritorio retirada y sin soporte de Internet Explorer 11 a través de una actualización de Microsoft Edge en ciertas versiones de Windows 10. Para obtener más información, consulte Preguntas frecuentes sobre la retirada de la aplicación de escritorio de Internet Explorer 11.

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 original del producto: Internet Explorer
Número de 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, ciertas opciones de descarga, como descargar controles 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 ambiente 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 los hosts WebBrowser para lograr el mismo efecto.

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

Un host MFC del control WebBrowser puede afectar fácilmente a estas propiedades ambientales 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 valores DISPID_AMBIENT_* y DLCTL_* se definen en Mshtmdid.h (\InetSDK\Include\MSHTMDID. H).

Referencias

Para obtener más información sobre el desarrollo de soluciones basadas en web para Microsoft Internet Explorer, vea Modo Internet Explorer y DevTools.