從 Android WebView 中取得點選連結的文字

Daniel Kao
EinkBro
Published in
Jun 5, 2022

在用 WebView 開發瀏覽器時,一個很常見的功能是:長按連結時,會跳出 ContextMenu Dialog,提供針對這個連結的一些功能。大部分的瀏覽器都會包含像是開新分頁,在背景開啟分頁,分享連結網址等等的選項。

有些時候,除了連結外,如果也能夠取得被點選的連結的字串那就更好了。因為使用者的本意可能是想要看到的字串,而不是它真正的連。

在經過一番尋找後,找到了一個特別的用法,在此記錄下來。

https://developer.android.com/reference/android/webkit/WebView#requestFocusNodeHref(android.os.Message)

WebView 有個函式叫 requestFocusNodeHref(), 它會回傳下面三個值:

  • url: anchor 的 href 值
  • src: 圖片 src d 值
  • title: anchor 的字串

其中的 title 就是我想要取得的資料。requestFocusNodeHref() 的使用方式有點間接。下面列出我在 EinkBro 中的實作:

1 行寫到,必須建立一個 Message 物件,並餵給它 target,然後,它會在 handleMessage 的 callback 函式中,傳回我們要的資料。拿到後,再去做後續的處理。因為我只需要 anchor 的文字,所以我只拿取了 title 而已。

順利拿到字串後,接下來不論是想要 copy 這個字串,或是將連結建立成新的書籤,都能更方便地進行了。

相關連結

--

--

Daniel Kao
EinkBro

2023 年新書出版! Android 開源專案「真」實戰啟航:瀏覽器 App EinkBro 開發者帶你逐步從 UI 設計、UX 提升到多功能實現秘技全解析