在用 WebView 開發瀏覽器時,一個很常見的功能是:長按連結時,會跳出 ContextMenu Dialog,提供針對這個連結的一些功能。大部分的瀏覽器都會包含像是開新分頁,在背景開啟分頁,分享連結網址等等的選項。
有些時候,除了連結外,如果也能夠取得被點選的連結的字串那就更好了。因為使用者的本意可能是想要看到的字串,而不是它真正的連。
在經過一番尋找後,找到了一個特別的用法,在此記錄下來。
WebView 有個函式叫 requestFocusNodeHref()
, 它會回傳下面三個值:
其中的 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,然後,它會在 handleMessage
的 callback
函式中,傳回我們要的資料。拿到後,再去做後續的處理。因為我只需要 anchor 的文字,所以我只拿取了 title 而已。
順利拿到字串後,接下來不論是想要 copy 這個字串,或是將連結建立成新的書籤,都能更方便地進行了。