当前位置: 代码迷 >> .NET相关 >> WPF webbrowser修改URL时,怎么不让它跳出新窗口
  详细解决方案

WPF webbrowser修改URL时,怎么不让它跳出新窗口

热度:843   发布时间:2016-04-24 02:41:38.0
WPF webbrowser修改URL时,如何不让它跳出新窗口
WPF写的代码,程序启动,webbrowser中显示一个html1的内容,点击一个按钮后,想webbrowser中显示html2,在这个切换过程中会创建新的窗口,在WPF中如何解决啊?winform中好像有个什么New_Window的事件,WPF中如何解决?
------解决思路----------------------
谁知道你是怎样让它“显示html2”的?
------解决思路----------------------
using SHDocVw;

先去system32中添加shdoocvw.dll引用
winform中可以用NewWindow3,但WPF出于安全考虑,这个事件处理在源代码中其实是空的

Window_Load事件处理中,反射ActiveX插件来处理

try
            {
                var prop = typeof(ActiveXHost).GetProperty("ActiveXInstance", BindingFlags.NonPublic 
------解决思路----------------------
 BindingFlags.Instance);
                this._axWebBrowser = (SHDocVw.WebBrowser)prop.GetValue(this.webBrowser1, null);
                if (this._axWebBrowser == null)
                {
                    error = 获取浏览器ActiveX失败";
                }
                else
                {
                    //屏蔽脚本错误弹窗
                    this._axWebBrowser.Silent = true;
                    //强制在控件中打开新窗口,WPF中的NewWindow3事件处理无效
                    //this._axWebBrowser.NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(_axWebBrowser_NewWindow3);
                    //处理新窗口事件
                    SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)this._axWebBrowser;
                    wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow);
                }
            }
            catch (Exception exp)
            {
                error = exp.Message;
            }

//浏览器新窗口事件强制在当前窗口中打开
        private void OnWebBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed)
        {
            Processed = true;
            this.webBrowser1.Navigate(URL);
        }

------解决思路----------------------
就try-catch放到Load中就行
------解决思路----------------------
为避免多次反射,你可以将prop封装为一个静态单例属性
  相关解决方案