我想重新创建一个带有标签功能,弹出窗口和重定向到新标签的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
}
ATTEMPTS
我在某些网站上测试了它,并且新标签上的弹出重定向有效但新生成的webBrowser似乎丢失了会话身份验证。我发现this之前的问题似乎与我的问题很接近,但在答案之后问题仍然存在。 因此,我认为这可能是由于原始的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);
声明。遗憾的是我无法使用这些,也许我会遗漏一些陈述。问题
如何强制我的新浏览器(在新标签页内)记住其“父母”会话/登录信息?
(没有人甚至试图回答。请注意我是否以不正确的方式发布了这个问题,或者是否存在另一个我可以发布我的问题的专用论坛)
方案: