Android WebViewClient中的onPageFinished是什么?

我想在我的网页完成加载后在Android WebView上执行操作。 我设置我的WebView有一个WebViewClient使用onPageFinished事件callback。 但是,经过一些testing之后,似乎没有等到页面上的所有JS完成加载之前我的onPageFinished代码触发。

Google文档说明了这一点:

public void onPageFinished (WebView view, String url) 

在API级别1中添加通知主机应用程序页面已完成加载。 这种方法仅适用于主框架。 当onPageFinished()被调用时,渲染图片可能还没有被更新。 要获取新图片的通知,请使用onNewPicture(WebView,Picture)。

参数

查看启动callback的WebView。

url网页的url。

1)onPageFinished是否只等待DOM加载?

2)有什么办法来检测页面上的任何JS何时完成? 如果是这样,我应该使用什么?

我没有看到任何WebViewClient将是为了这个目的。 我不想增加延迟,因为我的用户可以在EDGE或LTE上。

Solutions Collecting From Web of "Android WebViewClient中的onPageFinished是什么?"

您需要从WebChromeClient实现callback。 onPageFinished()是一个由WebViewClient提供的API。 还有另一个名为WebChromeClient的接口,提供您正在寻找的进度信息:

http://developer.android.com/reference/android/webkit/WebChromeClient.html#onProgressChanged(android.webkit.WebView,int

打开上面的链接并查找onProgressChanged(WebView视图,int newProgress) – “newProgress”variables为您提供已完成页面加载的百分比。 当它达到100你有一个有效的页面。 onPageFinished()不能可靠地用于此(由于服务器端redirect等)

我不知道“当页面上的JS完成”是什么意思。 也许你可以澄清你的意思?

从:

https://chromium.googlesource.com/chromium/src.git/+/master/android_webview/java/src/org/chromium/android_webview/AwWebContentsObserver.java

  @Override public void didFinishNavigation(final String url, boolean isInMainFrame, boolean isErrorPage, boolean hasCommitted, boolean isSameDocument, boolean isFragmentNavigation, Integer pageTransition, int errorCode, String errorDescription, int httpStatusCode) { ... if (client != null && isFragmentNavigation) { client.getCallbackHelper().postOnPageFinished(url); } } @Override public void didFailLoad( boolean isMainFrame, int errorCode, String description, String failingUrl) { AwContentsClient client = mAwContentsClient.get(); if (client == null) return; String unreachableWebDataUrl = AwContentsStatics.getUnreachableWebDataUrl(); boolean isErrorUrl = unreachableWebDataUrl != null && unreachableWebDataUrl.equals(failingUrl); if (isMainFrame && !isErrorUrl && errorCode == NetError.ERR_ABORTED) { // Need to call onPageFinished for backwards compatibility with the classic webview. // See also AwContents.IoThreadClientImpl.onReceivedError. client.getCallbackHelper().postOnPageFinished(failingUrl); } } @Override public void didStopLoading(String validatedUrl) { if (validatedUrl.length() == 0) validatedUrl = ContentUrlConstants.ABOUT_BLANK_DISPLAY_URL; AwContentsClient client = getClientIfNeedToFireCallback(validatedUrl); if (client != null && validatedUrl.equals(mLastDidFinishLoadUrl)) { client.getCallbackHelper().postOnPageFinished(validatedUrl); mLastDidFinishLoadUrl = null; } } 

我们可以很容易地看到,onPageFinished不是你所期望的。

要回答你的第一个问题:我发现onProgressChanged不会达到100 ,并且onPageFinished将不会被调用,直到所有的资产(css / js /图像)完成加载该页面。

但是,我不能find任何说明这一点的官方文件。