Webviewを使用していると必ず当たる壁「target=blank」問題
これはHTMLでは別タブで開く時に使われるタグなんですがAndroidのWebviewではデフォルト設定では動作しないように設計されています。
どうもセキュリティとかを鑑みてのことのようですが実行しなければ始まりませんよね?
その際の設定方法とかをメモ書きいたします
まずは動作するコードを貼ります
// target=blank時の処理
webView.settings.setSupportMultipleWindows(true)
webView.webChromeClient = object : WebChromeClient() {
override fun onCreateWindow(
view: WebView?,
isDialog: Boolean,
isUserGesture: Boolean,
resultMsg: Message?
): Boolean {
// target=blank時は別ブラウザで実行
val href = view!!.handler.obtainMessage()
view!!.requestFocusNodeHref(href)
val url = href.data.getString("url")
val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
context!!.startActivity(browserIntent)
return false
}
}
webView.webViewClient = WebViewClient()
webView.loadUrl("表示するURL")
です。
さっくり説明すると
setSupportMultipleWindows(true)
で複数ページの表示をONにして
onCreateWindow
をoverrideして別ブラウザで表示
です。
個人的にハマったのはblankのリンクに画像が使用されていた場合にリンクしたいURLが取得できずに困りました。
val href = view!!.handler.obtainMessage()
view!!.requestFocusNodeHref(href)
val url = href.data.getString("url")
の処理で取得できるようになりました。
以上です!