0

我有一个 WPF WebBrowser 控件。用户使用它登录网站并创建会话。当用户单击创建弹出窗口的链接时,会启动新的浏览器(并且会话丢失),因此他们被迫重新进行身份验证。

我通过指定一个事件处理程序来拦截 newWindow2 事件来解决这个问题:

Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
IServiceProvider serviceProvider = (IServiceProvider)webBrowser.Document;             
Guid serviceGuid = SID_SWebBrowserApp;
Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;            
SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2) serviceProvider.QueryService(ref serviceGuid, ref iid);            
SHDocVw.DWebBrowserEvents2_Event wbEvents2 =(SHDocVw.DWebBrowserEvents2_Event)myWebBrowser2;           
wbEvents2.NewWindow2 += new SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler(wbEvents2_NewWindow2);

事件处理程序代码如下:

public void wbEvents2_NewWindow2(ref object ppDisp, ref bool Cancel)
{
        popUpWindow = new Window1();
        popUpWindow.Show();

        popUpWindow.webBrowser.Navigate(new Uri("about:blank"));
        Guid SID_SWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
        IServiceProvider serviceProvider = (IServiceProvider)popUpWindow.webBrowser.Document;

        Guid serviceGuid = SID_SWebBrowserApp;

        Guid iid = typeof(SHDocVw.IWebBrowser2).GUID;

        SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid);

        ppDisp = myWebBrowser2.Application;

    }

在涉及某些 JavaScript 片段之前,一切都很好。例如,如果生成弹出窗口的链接以这种方式指向 JavaScript 函数:

<a href="javascript:SomeFunction('someParameter','someParameter')">Some link here</a>

并且该函数中的代码恰好打开了窗口,然后设置了一个等于 html 文档的变量并尝试写入该文档,但没有任何内容被写入 WebBrowser 控件中的文档。例如:

Var someVar = window.open(“”,”Parameters”,”Parameters”);
Var someDocument = someVar.document;
someDocument.writeln(“This never ends up in the source of the page loaded in the WebBrowser control”);

如果我注释掉拦截 newWindow2 事件并允许新浏览器启动并重新验证我的用户的代码 - 弹出窗口按预期加载(JavaScript writeln 函数将数据写入文档)。

我希望有人可以向我解释为什么 JavaScript writeln 没有被写入 WPF WebBrowser 控件中显示的文档,和/或建议这样做的方法。

4

1 回答 1

0

您是否为浏览器尝试过不同的 GUID?

于 2014-06-25T17:02:35.983 回答