如果我WebBrowser在我的应用程序中托管一个,并且在我的WebBrowser调用上显示的网页中有一个javascript代码window.close(),我在提示符上单击"是",我的WebBrowser消失,但我的表单保持打开状态.
我不想禁用javascript,而不是按"是"显然不是解决方案.处理这个问题的最佳方法是什么?即使用户按下"是",这是否可以以编程方式取消?而且,还有其他任何类似的javascript技巧window.close()可能会搞砸我的应用程序,我应该知道吗?(我的应用程序使用a WebBrowser来搜索网络,因此应该考虑每个可能的javascript代码.)
小智 6
在WPF中,您可以通过附加到WebBrowser的消息循环来捕获WM_CLOSE消息.
public MainWindow()
{
InitializeComponent();
webBrowser.MessageHook += webBrowser_MessageHook;
}
IntPtr webBrowser_MessageHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch(msg)
{
case 0x0010: // WM_CLOSE
handled = true; // cancel event here
// do additional stuff here
break;
}
return IntPtr.Zero;
}
Run Code Online (Sandbox Code Playgroud)
有一个接口DWebBrowserEvents2有一个方法WindowClosing,您可以使用该方法取消window.close()呼叫.
(我在这篇帖子中找到了建议)