WebBrowser コントロール クライアントがグローバル設定を共有する

警告

廃止され、サポート対象外となった Internet Explorer 11 デスクトップ アプリケーションは、特定のバージョンの Windows 10 で Microsoft Edge の更新プログラムを通じて完全に無効になります。 詳細については、「Internet Explorer 11 デスクトップ アプリの廃止に関する FAQ」をご覧ください。

この記事では、CWnd ベースのホスティング クラスの OnAmbientProperty メソッドをオーバーライドすることで、WebBrowser コントロール クライアントを共有するためのグローバル設定を実装する方法について説明します。

元の製品バージョン:インターネット エクスプローラー
元の KB 番号: 183412

現象

WebBrowser コントロールのすべてのホストは、同じグローバル インターネット設定を共有します。

解決方法

ほとんどのグローバル インターネット設定では、WebBrowser ホストごとに一連のプロパティを自動的に保存する方法はサポートされていません。

ただし、ActiveX コントロールをダウンロードするかどうかなど、特定のダウンロード オプションは、ホストごとにオーバーライドおよび指定できます。

状態

この動作は仕様です。

詳細

Internet Client SDK (InetSDK) に記載されているように、WebBrowser ホストは既定のディスパッチ インターフェイスに DISPID_AMBIENT_DLCONTROL アンビエント プロパティを実装して、ダウンロード オプションのグローバル設定をオーバーライドできます。

InetSDK (\InetSDK\Samples\Walkall) の WALKALL サンプルは、MSHTML ホストのこの手法を示しています。 WebBrowser ホストでも同様の方法を使用して、同じ効果を実現できます。

MSHTML は、クリックされたハイパーリンクに移動するときに 、DISPID_AMBIENT_USERAGENT を介して新しいユーザー エージェントを要求します。 このアンビエント プロパティはオーバーライドできますが、プログラムによって Navigate メソッドを呼び出すときには使用されません。 また、DOM のuserAgentナビゲーター オブジェクトまたは clientInformation 動作のプロパティも変更されません。このプロパティは、常にインターネット エクスプローラー独自の UserAgent 文字列を反映します。

WebBrowser コントロールの MFC ホストは、CWnd ベースのクラスをホストする OnAmbientProperty メソッドをオーバーライドすることで、これらのアンビエント プロパティに簡単に影響を与えることができます。

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);
}

DISPID_AMBIENT_* と DLCTL_* の値は、(\InetSDK\Include\MSHTMDID) でMshtmdid.h定義されます。H).

関連情報

Microsoft Internet エクスプローラー 向けの Web ベースのソリューションの開発の詳細については、「インターネット エクスプローラー モードと DevTools」を参照してください。