LoginSignup
0
0

[kotlin][Android]WebViewの「target=blank」が正常に動作しない時の対応

Posted at

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")

の処理で取得できるようになりました。

以上です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0