多くの掘り下げにより、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 インスタンスが開きます。
誰か助けてください:)?