【发布时间】:2020-02-12 18:38:12
【问题描述】:
我一直在通过实现 WebChromeClient 处理来自 Javascript 的 window.open() 请求
myWebView.webChromeClient = MyChromeClient()
而且,MyChromeClient 看起来像:
inner class MyChromeClient : WebChromeClient() {
override fun onCreateWindow(
view: WebView?,
isDialog: Boolean,
isUserGesture: Boolean,
resultMsg: Message?
): Boolean {
showNewWindowDialog(resultMsg)
return true
}
}
对于任何新窗口,我都会显示一个包含 WebView 的对话框。
当新窗口一次打开一个时,代码运行良好。我实现的 DialogFragment 按预期从新窗口打开 URL。如果有多个窗口,代码可以显示堆叠的多个对话框。
但是,如果在 Javascript 中同时触发多个 window.open(),则只有第一个对话框加载 url,其余对话框保持空白。
以下 JS 代码在 for 循环中打开多个窗口。 WebChromeClient 的 onCreateWindow 被多次调用。屏幕中显示了两个对话框(堆叠),但第二个对话框的 webview 没有加载任何 url。
var urls = ["https://facebook.com", "https://google.com"]
urls.forEach((url) => {
window.open(url)
})
但是,如果 JS 有一些延迟,比如说 500 毫秒,它可以正常工作。两个对话框都加载各自的 url。
urls.forEach((url, i) => {
setTimeout(()=>{
window.open(url)
}, 500 * i)
})
由于我无法在原始代码中添加延迟,我该如何解决这个问题?这是 Android 的 WebView 和 WebChromeClient 的限制吗?
【问题讨论】:
标签: android android-webview popupwindow window.open webchromeclient