一种可能的解决方法是使用自定义WebView,强制WebView允许弹出窗口。以下是一个使用Kotlin编写的示例代码:
class CustomWebView : WebView {
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
override fun onCreateWindow(
view: WebView?,
isDialog: Boolean,
isUserGesture: Boolean,
resultMsg: Message?
): Boolean {
val newWebView = WebView(context)
val transport = resultMsg?.obj as WebView.WebViewTransport
transport.webView = newWebView
resultMsg.sendToTarget()
return true
}
}
在此示例中,我们创建了一个名为CustomWebView的WebView类,并重写了onCreateWindow方法。该方法充当来自WebView的请求弹出新窗口的拦截器。我们创建了一个新的WebView实例,将其传递给transport.webView,然后返回true以告知WebView引擎去处理请求。接下来,我们可以在我们的活动中使用CustomWebView:
val webView = CustomWebView(this)
webView.settings.javaScriptEnabled = true
webView.webViewClient = WebViewClient()
setContentView(webView)
这样做应该允许@solid/react库在WebView中进行身份验证,而无需弹出窗口问题。