我已在WPF中添加对webbrowser的引用……但出现上面的问题……求各位大神指导……

解决方案 »

  1.   

    响应newwindow事件,它会捕获新建窗口的动作。
      

  2.   

    思路就是NewWindow
    public partial class WebBrowserHelper {
    private WebBrowser _webBrowser;
    private object _cookie; public event CancelEventHandler NewWindow; public WebBrowserHelper(WebBrowser webBrowser) {
    if(webBrowser == null)
    throw new ArgumentNullException("webBrowser");
    _webBrowser = webBrowser;
    _webBrowser.Dispatcher.BeginInvoke(new Action(Attach), DispatcherPriority.Loaded);
    } public void Disconnect() {
    if(_cookie != null) {
    _cookie.ReflectInvokeMethod("Disconnect", new Type[] { }, null);
    _cookie = null;
    }
    } private void Attach() {
    var axIWebBrowser2 = _webBrowser.ReflectGetProperty("AxIWebBrowser2");
    var webBrowserEvent = new WebBrowserEvent(this);
    var cookieType = typeof(WebBrowser).Assembly.GetType("MS.Internal.Controls.ConnectionPointCookie");
    _cookie = Activator.CreateInstance(
    cookieType,
    ReflectionService.BindingFlags,
    null,
    new[] { axIWebBrowser2, webBrowserEvent, typeof(DWebBrowserEvents2) },
    CultureInfo.CurrentUICulture);
    } private void OnNewWindow(ref bool cancel) {
    var eventArgs = new CancelEventArgs(cancel);
    if(NewWindow != null) {
    NewWindow(_webBrowser, eventArgs);
    cancel = eventArgs.Cancel;
    }
    }
    }public partial class WebBrowserHelper {
    private class WebBrowserEvent : StandardOleMarshalObject, DWebBrowserEvents2 {
    private WebBrowserHelper _helperInstance = null; public WebBrowserEvent(WebBrowserHelper helperInstance) {
    _helperInstance = helperInstance;
    } #region DWebBrowserEvents2 Members public void StatusTextChange(string text) { } public void ProgressChange(int progress, int progressMax) { } public void CommandStateChange(long command, bool enable) { } public void DownloadBegin() { } public void DownloadComplete() { } public void TitleChange(string text) { } public void PropertyChange(string szProperty) { } public void BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel) { } public void NewWindow2(ref object pDisp, ref bool cancel) {
    _helperInstance.OnNewWindow(ref cancel);
    } public void NavigateComplete2(object pDisp, ref object URL) { } public void DocumentComplete(object pDisp, ref object URL) { } public void OnQuit() { } public void OnVisible(bool visible) { } public void OnToolBar(bool toolBar) { } public void OnMenuBar(bool menuBar) { } public void OnStatusBar(bool statusBar) { } public void OnFullScreen(bool fullScreen) { } public void OnTheaterMode(bool theaterMode) { } public void WindowSetResizable(bool resizable) { } public void WindowSetLeft(int left) { } public void WindowSetTop(int top) { } public void WindowSetWidth(int width) { } public void WindowSetHeight(int height) { } public void WindowClosing(bool isChildWindow, ref bool cancel) { } public void ClientToHostWindow(ref long cx, ref long cy) { } public void SetSecureLockIcon(int secureLockIcon) { } public void FileDownload(ref bool cancel) { } public void NavigateError(object pDisp, ref object URL, ref object frame, ref object statusCode, ref bool cancel) { } public void PrintTemplateInstantiation(object pDisp) { } public void PrintTemplateTeardown(object pDisp) { } public void UpdatePageStatus(object pDisp, ref object nPage, ref object fDone) { } public void PrivacyImpactedStateChange(bool bImpacted) { } #endregion
    }
    }
      

  3.   

    我添加newwindow响应事件后,可以了……但是有些页面打开后,会弹出一个对话框:上面写着:
    当前页面的脚本发生错误 
    行:168
    Char:6
    错误:无法设置属性“innerHTML”的值:对象为null或未定义
    代码:0
    URL:http://www.southcn.com/public/ria/moodpoll/ScMooPoll.js
    是否要在此页面上继续运行脚本?
    请问是怎么一回事呢?
      

  4.   

    ok,通过扩展方法镇压反革命
    public static class WebBrowserExtensions {
    public static void SuppressScriptErrors(this WebBrowser webBrowser, bool hide) {
    FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
    if(fiComWebBrowser == null) return;
    object objComWebBrowser = fiComWebBrowser.GetValue(webBrowser);
    if(objComWebBrowser == null) return;
    objComWebBrowser.GetType().InvokeMember("Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] { hide });
    }
    }
      

  5.   

    不是不是啊,我现在想问的是
    我添加newwindow响应事件后,可以了……但是有些页面打开后,会弹出一个对话框:上面写着:
    当前页面的脚本发生错误  
    行:168
    Char:6
    错误:无法设置属性“innerHTML”的值:对象为null或未定义
    代码:0
    URL:http://www.southcn.com/public/ria/moodpoll/ScMooPoll.js
    是否要在此页面上继续运行脚本?
    请问是怎么一回事呢?
      

  6.   


    报什么错?using System.Reflection;
    using System.Windows.Controls;即可,不用增加额外的Reference
      

  7.   

      CoreResGen:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsFormsIntegration.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\x86\Debug\WpfApplication7.exe /resource:obj\x86\Debug\WpfApplication7.g.resources /resource:obj\x86\Debug\WpfApplication7.Properties.Resources.resources /target:winexe App.xaml.cs MainWindow.xaml.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs "D:\C++2010 Project\Projects测试\WpfApplication7\WpfApplication7\obj\x86\Debug\MainWindow.g.cs" "D:\C++2010 Project\Projects测试\WpfApplication7\WpfApplication7\obj\x86\Debug\App.g.cs"
    CoreCompile:
      C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /platform:x86 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsFormsIntegration.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\x86\Debug\WpfApplication7.exe /resource:obj\x86\Debug\WpfApplication7.g.resources /resource:obj\x86\Debug\WpfApplication7.Properties.Resources.resources /target:winexe App.xaml.cs MainWindow.xaml.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs "D:\C++2010 Project\Projects测试\WpfApplication7\WpfApplication7\obj\x86\Debug\MainWindow.g.cs" "D:\C++2010 Project\Projects测试\WpfApplication7\WpfApplication7\obj\x86\Debug\App.g.cs"