2

多くの掘り下げにより、SHDocVw.dll を使用して 2 つのフォーム間でセッションを共有することができました。メイン フォームとポップアップ フォームがあり、それぞれに WebBrowser コントロールが含まれています。

私の質問は、window.close javascript イベントを処理してポップアップ フォームを閉じるにはどうすればよいですか?

私は正しい構文を持っていると思いますが、それを実現することはできません。

メイン フォーム (webbrowser Navigator) :

    SHDocVw.WebBrowser nativeBrowser;
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        nativeBrowser = (SHDocVw.WebBrowser)Navigator.ActiveXInstance;
        nativeBrowser.NewWindow2 += nativeBrowser_NewWindow2;
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        nativeBrowser.NewWindow2 -= nativeBrowser_NewWindow2;
        base.OnFormClosing(e);
    }

    void nativeBrowser_NewWindow2(ref object ppDisp, ref bool Cancel)
    {
        var popup = new Form3();
        popup.Show(this);
        ppDisp = popup.webBrowser1.ActiveXInstance;
    }

ポップアップフォーム

public Form3()
    {
        InitializeComponent();         
    }

    public WebBrowser Browser
    {
        get { return webBrowser1; }
    }

ポップアップコードに次のようなものを追加する必要があると思います:

SHDocVw.WebBrowser nativeBrowser;

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    nativeBrowser = (SHDocVw.WebBrowser)webBrowser1.ActiveXInstance;
    nativeBrowser.WindowClosing += nativeBrowser_closing;
}

protected void nativeBrowser_closing(bool IsChildWindow, ref bool Cancel)
{
    this.Close();
}

しかし、宣言するSHDocVw.WebBrowser nativeBrowserと、現在のインスタンスにバインドするのではなく、新しい IE インスタンスが開きます。

誰か助けてください:)?

4

0 に答える 0