2013-06-21 73 views
0

我有一個WPF WebBrowser控件。用戶使用它登錄網站並創建會話。當用戶點擊創建彈出窗口的鏈接時,將啓動一個新的瀏覽器(並且會話丟失),以便它們被強制重新進行身份驗證。C#WPF WebBrowser控件,JavaScript writeln函數在攔截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代碼段獲得

我已經通過指定的事件處理程序攔截NewWindow2事件圍繞這個工作參與其中。例如,如果在這種方式生成一個彈出指向一個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書寫不會被寫入到WPF WebBrowser控件中顯示的文檔中,並且/或者建議這樣做。

+0

我創建了一個小雜亂的POC項目來演示這個問題。它可以從[此鏈接]下載(http://www.budwill.net/test/WpfApplication1.zip)。運行後,在文本框中輸入「http:// www.budwill.net/test /',然後單擊Go。一個頁面出現一個鏈接。該鏈接調用一個執行window.open然後是一些document.write的JavaScript函數。新的彈出窗口顯示爲空白。但是,如果您要在常規瀏覽器中訪問相同的URL並單擊該鏈接,則彈出窗口將填入document.write的文本。 – Andrew

回答

0

您是否嘗試過瀏覽器的其他GUID?

+0

我想知道你是否找到了解決這個問題的辦法? 我目前有同樣的問題 – Heheas