簡體   English   中英

單擊鏈接時,如何在“ Webbrowser”事件中獲取鏈接屬性(頁面名稱)?

[英]How do I get the link attributes (page name) in the “Webbrowser” event when I click a link?

我計划建立一個內容管理系統。
系統組成:
-按類別的頁面樹。 (按類別的頁面樹);
- 網頁瀏覽器。 (網頁瀏覽器);

頁面內容:
-格式化文本;
- 圖片;
-參考;

HTML格式的文本存儲在數據庫中。
類別樹顯示從數據庫到Web瀏覽器的文本。

有必要在頁面之間進行轉換。

也就是說,從頁面“ Page_1”到頁面“ Page_2”邏輯的必要段落的轉換:
-用戶。 它在頁面“ Page_1”上。
-用戶。 單擊頁面“ Page_1”上的鏈接。
-瀏覽器。 打開頁面“ Page_2”,滾動到“ Paragraph_N”(“ N”取決於頁面上的哪個段落是“ Page_1”)

我計划使用鏈接“ anchor”進行的頁面之間的過渡

<a href="text.html#bottom"> Go to the bottom of the text </a>  

我認為要執行此邏輯,需要應用程序執行以下操作:
-跟蹤事件“單擊鏈接”;
-從鏈接中提取鏈接所引用頁面的名稱(“ text.html”);
-根據名稱從數據庫中提取頁面;

示例HTML代碼“ Page1”和“ Page 2”
https://codeshare.io/2Bb03L

問題
1.單擊鏈接后,如何在“ Webbrowser”事件中獲取鏈接屬性(頁面名稱)?
2.執行此邏輯的更合理的方法是什么(從頁面“ Page_1”到頁面“ Page_2”)?
3.0單擊鏈接時如何進行以下操作:
3.1。 如果鏈接到網站-在Chrome中打開?
3.2。 如果從數據庫鏈接到頁面-在“ webBrowser1”中打開?
3.3。 如果鏈接到數據庫中頁面的段落-在
“ webBrowser1”並將滾動條滾動到所需的段落?
圖片

回答您的第一個問題“ 單擊鏈接時如何在“ Webbrowser”事件中獲取鏈接屬性(頁面名稱)? ”:

假設您的Webbrowser名為webBrowser1

您需要將C#對象暴露給JavaScript可以直接調用的WebBrowser,該對象必須將ComVisibleAttribute設置為true。

[System.Runtime.InteropServices.ComVisible(true)]
public class ScriptInterface
{
    public void OnAnchorClick(string href)
    {
        var parts = href.Split('#');
        var pageName = parts[0];
        //do whatever with page name    
    }
}

配置您的Webbrowser:

webBrowser1.ObjectForScripting = new ScriptInterface();

現在,在您的js中,您可以通過以下方式調用OnAnchorClick方法:

document.getElementsByTagName('a')[0].onclick = function(){
   window.external.OnAnchorClick(this.href);
   return false;
}

其他有用的參考:

如何通過webbrowser控件為winforms處理javascript事件

如何在瀏覽器控件中注入JavaScript

從C調用Web瀏覽器控件中的JavaScript

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM