iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Mobile Development

從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車系列 第 12

[Day12] 從開發瀏覽器 APP 學習實戰技巧 -- 取得 WebView 當下點擊連結的文字

  • 分享至 

  • xImage
  •  

在用 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 中的實作:

var titleText = ""
val newMessage = Message().apply {
    target = object : Handler(Looper.getMainLooper()) {
        override fun handleMessage(msg: Message) {
            titleText = (msg.data.getString("title") ?: nonNullUrl).replace("\n", "").trim()
        }
    }
}
webView.requestFocusNodeHref(newMessage)

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

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

相關連結

commit


上一篇
[Day11] 從開發瀏覽器 APP 學習實戰技巧 -- 簡易的跨設備資訊分享機制 Part III
下一篇
[Day13] 從開發瀏覽器 APP 學習實戰技巧 -- 利用 Github Actions 編譯 release apk
系列文
從開發瀏覽器 APP 學習 Android 實戰技巧,並搭上 Jetpack Compose 的列車31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言