Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I suppress script errors when using the WPF WebBrowser control?

Tags:

browser

wpf

I have a WPF application that uses the WPF WebBrowser control to display interesting web pages to our developers on a flatscreen display (like a news feed).

The trouble is that I occasionally get a HTML script error that pops up a nasty IE error message asking if I would like to "stop running scripts on this page". Is there a way to suppress this error checking?

NOTE: I have disabled script debugging in IE settings already.

like image 618
willem Avatar asked Aug 19 '09 07:08

willem


People also ask

How do I stop a script error in WebBrowser control?

Occasionally you might need to suppress script errors while displaying dialog boxes such as those used for browser security settings and user login. In this case, set ScriptErrorsSuppressed to false and suppress script errors in a handler for the HtmlWindow.


1 Answers

Here is a solution i just made with reflection. Solves the issue :) I run it at the Navigated event, as it seems the activeX object is not available until then.

What it does is set the .Silent property on the underlying activeX object. Which is the same as the .ScriptErrorsSuppressed property which is the Windows forms equivalent.

 public void HideScriptErrors(WebBrowser wb, bool Hide) {     FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);     if (fiComWebBrowser == null) return;     object objComWebBrowser = fiComWebBrowser.GetValue(wb);     if (objComWebBrowser == null) return;     objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { Hide });  } 

A better version that can be run anytime and not after the .Navigated event:

public void HideScriptErrors(WebBrowser wb, bool hide) {     var fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);     if (fiComWebBrowser == null) return;     var objComWebBrowser = fiComWebBrowser.GetValue(wb);     if (objComWebBrowser == null) {         wb.Loaded += (o, s) => HideScriptErrors(wb, hide); //In case we are to early         return;     }     objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide }); } 

If any issues with the second sample, try swapping wb.Loaded with wb.Navigated.

like image 81
Wolf5 Avatar answered Oct 03 '22 13:10

Wolf5