Los clientes del control WebBrowser comparten la configuración global

En este artículo se proporcionan métodos para implementar la configuración global para compartir clientes de controles WebBrowser mediante el reemplazo del método OnAmbientProperty de la clase basada en CWnd de host.

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

Síntomas

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

Solución

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

Sin embargo, algunas opciones de descarga, como si se descargan los controles ActiveX o no, se pueden invalidar y especificar para cada host.

Estado

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

Más información

Como se documenta en Internet Client SDK (InetSDK), los hosts de WebBrowser pueden implementar la propiedad de ambiente DISPID_AMBIENT_DLCONTROL en su interfaz de envío predeterminada para invalidar la configuración global de las opciones de descarga.

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

MSHTML también preguntará a un nuevo agente de usuario a través de DISPID_AMBIENT_USERAGENT cuando se desplace para hacer clic en hipervínculos. Esta propiedad de ambiente se puede invalidar, pero no se usa cuando se llama al método Navigate mediante programación. Tampoco provocará userAgent que se modifique la propiedad del objeto Navigator del Dom o el comportamiento de clientInformation : esta propiedad siempre reflejará la cadena UserAgent de Internet Explorer.

Un host MFC del control WebBrowser puede afectar fácilmente a estas propiedades de ambiente al reemplazar 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 acerca del desarrollo de soluciones basadas en web para Microsoft Internet Explorer, vea el modo de Internet Explorer y el DevTools.