タブ機能、ポップアップ ブロック、および新しいタブへのリダイレクトを備えた 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は読み取り専用であるため
newTabWebBrowser.ActiveXInstance = actualWebBrowser.ActiveXInstance;
、ppDisp = actualWebBrowser.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#専用フォーラムが存在する場合は、お知らせください)
図式: