我有一个WPF应用程序,该应用程序显示3个带有3个单独的Web浏览器控件的网站。我无法控制这些网站,它们是第三方。我中的两个人操作DOM以仅显示我的客户感兴趣的元素。第三个人登录并操作DOM以显示特定的图。目前,这一切都可以自动进行,并且可以作为一种仅用于展示的信息亭。
但是,有时其中一个站点会出现一些JavaScript问题,这将提示浏览器显示消息“停止运行此脚本?此页面上的脚本导致您的Web浏览器运行缓慢。如果继续运行,您的计算机可能会变得无响应”,选择“是/否”。每隔一段时间刷新页面就可以了。 (一个小时)
由于没有用户交互,该如何处理此消息?我也找不到触发的事件。
我已经为ActiveX控件实现了静默模式。它非常适合抑制其他消息。只是没有这个。
我已编辑注册表,以使Web控件充当IE11。这使页面看起来更好,但并不能阻止该问题。
问题不会立即发生,也不是可预见的或可诱发的。我已经使用Chrome的工具记录了网站的内存使用情况。没有泄漏,直到发生某些事情并且我得到消息。因此,我认为第三方JavaScript处理的某些事件突然失败。
我已经尝试登录应用程序,但是直到对话框无法阻止页面加载浏览器才能重新加载页面时,这不是应用程序错误。这种阻止操作是导致应用程序失败的原因。因此,我想处理此对话框消息以防止发生异常或更好地处理异常。尽管我更喜欢处理消息。
-编辑以添加:为了更清楚地显示问题消息,如下所示: https://superuser.com/questions/408886/stop-running-this-script-is-this-legit
,而不是此处介绍的一个: https://www-01.ibm.com/support/docview.wss?uid=swg21680774
异常消息如下:
The requested resource is in use. (Exception from HRESULT: 0x800700AA)e.Exception.Message.
at MS.Win32.UnsafeNativeMethods.IWebBrowser2.Navigate2(Object& URL, Object& flags, Object& targetFrameName, Object& postData, Object& headers)
at System.Windows.Controls.WebBrowser.DoNavigate(Uri source, Object& targetFrameName, Object& postData, Object& headers, Boolean ignoreEscaping)
at TVdisplay.MainWindow.reload_bi(Object sender, EventArgs e) in C:\Users\...\MainWindow.xaml.cs:line 201
当我操作DOM时,我有遍历代码块的try块。它尚未引起异常。仅当我尝试使用(我想)进行导航时,Web浏览器控件的刷新时间最短。
private void reload_bi(object sender, EventArgs e)
{
try
{
webbrowser.Navigate("http://somewebsite.com"); //line 201
}
catch (Exception error)
{
logThoseErrors(DateTime.Now.ToString());
logThoseErrors(error.Message.ToString());
logThoseErrors(error.StackTrace.ToString());
}
}
谢谢