因爲沒有人對他們中的target="_blank"
的鏈接做出正確的回答。我會嘗試這樣做。
首先,爲什麼不工作?因爲當用戶點擊瀏覽器控件中的鏈接時,它不會觸發導航事件,它會觸發新的窗口事件。在新窗口事件中,您無權訪問單擊的URL或元素以中斷新窗口並打開默認窗口。這是你如何做到的。
首先,在您的文檔完成事件中添加以下代碼。
private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string tagUpper = "";
foreach (HtmlElement tag in (sender as WebBrowser).Document.All)
{
tagUpper = tag.TagName.ToUpper();
if((tagUpper == "AREA") || (tagUpper == "A"))
{
tag.MouseUp += new HtmlElementEventHandler(this.link_MouseUp);
}
}
}
這樣做是經過所有的HTML元素標記,發現您在if語句定義存在的所有標籤。對於我的情況,我也需要AREA標籤。你可以捕捉任何你想要的標籤。然後,我們在該元素上附加一個點擊事件。
接下來我們用這段代碼創建事件本身。
void link_MouseUp(object sender, HtmlElementEventArgs e)
{
Regex pattern = new Regex("href=\\\"(.+?)\\\"");
Match match = pattern.Match((sender as HtmlElement).OuterHtml);
string link = match.Groups[1].Value;
Process.Start(link);
}
此代碼建立了一個正則表達式,你很可能需要改變這種模式根據自己的需要。我建議在這裏添加一個斷點,看看你的正則表達式需要看看。你可以在regex link上測試正則表達式。確保你使用括號進行分組。我也建議使用問號不要貪婪。然後,我們匹配該模式,並從比賽的組中獲取網址。之後,這只是一個使用該網址開始流程的情況。這將打開默認瀏覽器,或者如果您的默認瀏覽器已打開,請添加新選項卡。
我們需要做的最後一件事是取消鏈接的默認邏輯。我們使用下面的代碼在NewWindow事件中執行此操作。
private void webBrowserControl_NewWindow(object sender, CancelEventArgs e)
{
e.Cancel = true;
}
我想知道如果您在網頁瀏覽器控件'target =「_ blank」'裏面設置所有鏈接會發生什麼? – Tombatron
@Tombatron我剛剛發佈了一個關於這個問題的新答案,請參考它。 – Gaugeforever