我想重新创建一个具有选项卡功能、弹出块和重定向到新选项卡的 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# 专用论坛)
方案: