diff --git a/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebChromeClient.kt b/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebChromeClient.kt index 90f102f8..fa69b3ad 100644 --- a/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebChromeClient.kt +++ b/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebChromeClient.kt @@ -1,10 +1,13 @@ package dev.hotwire.turbo.views import android.net.Uri +import android.os.Message import android.webkit.ValueCallback import android.webkit.WebChromeClient import android.webkit.WebView import dev.hotwire.turbo.session.TurboSession +import dev.hotwire.turbo.util.toJson +import dev.hotwire.turbo.visit.TurboVisitOptions open class TurboWebChromeClient(val session: TurboSession) : WebChromeClient() { override fun onShowFileChooser( @@ -17,4 +20,18 @@ open class TurboWebChromeClient(val session: TurboSession) : WebChromeClient() { params = fileChooserParams ) } + + override fun onCreateWindow(webView: WebView, isDialog: Boolean, isUserGesture: Boolean, resultMsg: Message?): Boolean { + val message = webView.handler.obtainMessage() + webView.requestFocusNodeHref(message) + + message.data.getString("url")?.let { + session.visitProposedToLocation( + location = it, + optionsJson = TurboVisitOptions().toJson() + ) + } + + return false + } } diff --git a/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebView.kt b/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebView.kt index 44fa4d62..cc2be3c5 100644 --- a/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebView.kt +++ b/turbo/src/main/kotlin/dev/hotwire/turbo/views/TurboWebView.kt @@ -27,6 +27,7 @@ open class TurboWebView @JvmOverloads constructor(context: Context, attrs: Attri init { settings.javaScriptEnabled = true settings.domStorageEnabled = true + settings.setSupportMultipleWindows(true) layoutParams = FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) }