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

前端 未结 8 1809
余生分开走
余生分开走 2020-12-02 09:34

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 tro

8条回答
  •  生来不讨喜
    2020-12-02 10:25

    Check the below code for suppressing script errors for WPF browser control..

        public MainWindow
        {
        InitializeComponent();
        WebBrowserControlView.Navigate(new Uri("https://www.hotmail.com"));
                            //The below checks for script errors.
        ViewerWebBrowserControlView.Navigated += ViewerWebBrowserControlView_Navigated;
        }
    
    void ViewerWebBrowserControlView_Navigated(object sender, NavigationEventArgs e)
                {
        BrowserHandler.SetSilent(ViewerWebBrowserControlView, true); // make it silent
                }
    
    public static class BrowserHandler
    {
        private const string IWebBrowserAppGUID = "0002DF05-0000-0000-C000-000000000046";
        private const string IWebBrowser2GUID = "D30C1661-CDAF-11d0-8A3E-00C04FC9E26E";
    
        public static void SetSilent(System.Windows.Controls.WebBrowser browser, bool silent)
        {
            if (browser == null)
                MessageBox.Show("No Internet Connection");
    
            // get an IWebBrowser2 from the document
            IOleServiceProvider sp = browser.Document as IOleServiceProvider;
            if (sp != null)
            {
                Guid IID_IWebBrowserApp = new Guid(IWebBrowserAppGUID);
                Guid IID_IWebBrowser2 = new Guid(IWebBrowser2GUID);
    
                object webBrowser;
                sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
                if (webBrowser != null)
                {
                    webBrowser.GetType().InvokeMember("Silent", BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
                }
            }
        }
    
    }
    
    [ComImport, Guid("6D5140C1-7436-11CE-8034-00AA006009FA"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IOleServiceProvider
    {
        [PreserveSig]
        int QueryService([In] ref Guid guidService, [In] ref Guid riid, [MarshalAs(UnmanagedType.IDispatch)] out object ppvObject);
    
    
       }
    

    Whereas, If you are using Winforms Web browser with winforms host.. you have a property "SuppressScriptErrors" set it to true

        
        
    
    

提交回复
热议问题