Blog スタッフブログ

Android システム開発

[Android][Kotlin]WebViewのtarget=_blank対応

システム開発担当のTFです。

※Android10対応(他バージョンの場合、細かい部分等が異なる事があります)

やり方

  • WebViewのsetSupportMultipleWindowsをtrueにする
  • WebViewのwebChromeClientの、onCreateWindowをoverrideする
  • onCreateWindow内で、Intentでアプリの外に出す処理を行う

参考

  WebView でのウェブアプリの作成問題

サンプル

class MainActivity : AppCompatActivity() {

	// WebView用の変数
	lateinit var webView : WebView
	
	override fun onCreate(savedInstanceState: Bundle?) {
		// 省略
		
		// WebViewの作成
		webView = object : WebView(context){
		}
		
		// 設定
        var settings = webView.settings
		
		// setSupportMultipleWindows を trueにし、onCreateWindowが呼ばれるようにする
        settings.setSupportMultipleWindows(true)
		
		// WebViewのwebChromeClient設定
		webView.webChromeClient = object : WebChromeClient(){

            // target=_blankで呼ばれる
            override fun onCreateWindow(
                view: WebView?,
                isDialog: Boolean,
                isUserGesture: Boolean,
                resultMsg: Message?
            ): Boolean {
                // Intentでアプリ外に出す
				val result = view!!.hitTestResult
                val data = result.extra
                val context = view!!.context
                val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse(data))
                context.startActivity(browserIntent)
                return false
            }
        }
		
	}
}