4

我想重新创建一个具有选项卡功能、弹出块和重定向到新选项卡的 Web 浏览器。这是我能够达到的:

firstTabWebBrowser.Navigate("www.site-with-popup.com"); //inizializa my broeser navigation

//...

(firstTabWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3); //new window 3 event    

//...

private void Browser_NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
{

Cancel = true; //block a new IE window to be opened

TabPage addedTabPage = new TabPage("redirected tab"); //create new tab
tabControl_webBrowsers.TabPages.Add(addedTabPage); //add new tab to the TabControl
System.Windows.Forms.WebBrowser newTabWebBrowser = new System.Windows.Forms.WebBrowser() //create new WebBrowser inside the new tab
{
   Parent = addedTabPage,
   Dock = DockStyle.Fill
};

System.Windows.Forms.WebBrowser actualWebBrowser = (System.Windows.Forms.WebBrowser)tabControl_webBrowsers.SelectedTab.GetChildAtPoint(new Point(10, 10)); //the only way I've found to select the actual webBrowser
ppDisp = actualWebBrowser.ActiveXInstance; //try to pass actual browser reference to the new browser, but I can't notice any difference without this line

newTabWebBrowser.Navigate(bstrUrl); //navigate to the popup destination url

(newTabWebBrowser.ActiveXInstance as SHDocVw.WebBrowser).NewWindow3 += new SHDocVw.DWebBrowserEvents2_NewWindow3EventHandler(Browser_NewWindow3); //attach this function to the new browser            

}      

尝试

我已经在一些网站上对其进行了测试,并且新选项卡上的弹出重定向有效,但新生成的 webBrowser 似乎丢失了会话身份验证。我发现这个以前的问题似乎与我的很接近,但在回答之后问题仍然存在。因此,我想这可能是由于原始 webBrowser 的 cookie,我可以通过 actualWebBrowser.Document.Cookie 访问,但我无法转移到新浏览器。

  • 我已经尝试过newTabWebBrowser.ActiveXInstance = actualWebBrowser.ActiveXInstance;,而不是ppDisp = actualWebBrowser.ActiveXInstance;听起来很糟糕并且无法编译,因为 newTabWebBrowser.ActiveXInstance 是只读的。
  • 虽然newTabWebBrowser.Document.Cookie = actualWebBrowser.Document.Cookie;生成一个不会阻止应用程序但跳过我的Browser_NewWindow3()功能的错误。
  • 我还发现InternetSetCookie(url, cookie);哪些必须声明[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] static extern bool InternetSetCookie(string Url, string Cookie);不幸的是我无法使用这些,也许我错过了一些陈述。

问题

如何强制我的新浏览器(在新选项卡内)记住其“父级”会话/登录信息?

甚至没有人试图回答。请注意我是否以不正确的方式发布了这个问题,或者是否存在另一个我可以发布我的问题的 c# 专用论坛


方案:

在此处输入图像描述

4

0 回答 0