在 webView.loadDataWithBaseURL() 上通知
Notify on webView.loadDataWithBaseURL()
我试图在通过 webView.loadDataWithBaseURL() 将数据加载到我的网络视图后立即将一些 Javascript 注入我的网络视图,但我无法知道数据何时真正完成加载.这个方法是同步的吗?我可以只依赖立即加载的数据,因为它来自内存吗?我问是因为我注入的 Javascript 似乎没有在页面上看到元素。我假设这是因为在注入 JS 之前尚未加载视图。 (我还没有证明这一点。)
您可以使用 setWebViewClient() and implement its onPageFinished() 向您的 WebView 注册 WebViewClient 以了解页面何时加载完成。
postVisualStateCallback
自定义 WebViewClient
解决了我的问题:
class WebViewWithCallback(private val webView: WebView, private val callback: () -> Unit): WebViewClient(){
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
webView.postVisualStateCallback(0, object: WebView.VisualStateCallback() {
override fun onComplete(p0: Long) {
callback.invoke()
}
})
}
}
我试图在通过 webView.loadDataWithBaseURL() 将数据加载到我的网络视图后立即将一些 Javascript 注入我的网络视图,但我无法知道数据何时真正完成加载.这个方法是同步的吗?我可以只依赖立即加载的数据,因为它来自内存吗?我问是因为我注入的 Javascript 似乎没有在页面上看到元素。我假设这是因为在注入 JS 之前尚未加载视图。 (我还没有证明这一点。)
您可以使用 setWebViewClient() and implement its onPageFinished() 向您的 WebView 注册 WebViewClient 以了解页面何时加载完成。
postVisualStateCallback
自定义 WebViewClient
解决了我的问题:
class WebViewWithCallback(private val webView: WebView, private val callback: () -> Unit): WebViewClient(){
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
webView.postVisualStateCallback(0, object: WebView.VisualStateCallback() {
override fun onComplete(p0: Long) {
callback.invoke()
}
})
}
}