C g*_*ics 13 android webview android-webview
在webview android我试图加载一个网址,以检查此网址的加载是否成功(互联网连接可用,服务器已启动等)我的印象是webview.loadUrl会抛出异常,但错误!因为它在这里明确说明"不会抛出异常".
那么如何检查webview.loadUrl是否没有失败?
Mik*_*nov 15
不幸的是,目前在WebView中没有简单的方法来确保页面上的所有内容都已成功加载.我们希望在未来版本中提供更好的API.让我解释一下你现在可以做些什么.
首先,为了检测阻止WebView连接到服务器以加载主页的任何问题(例如,错误的域名,I/O错误等),您应该使用WebViewClient.onReceivedError回调,因为其他人正确建议:
public class MyWebViewClient extends WebViewClient {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
// Make a note about the failed load.
}
}
myWebView.setWebViewClient(new MyWebViewClient());
Run Code Online (Sandbox Code Playgroud)
如果服务器连接成功,并且检索并解析了主页面,则会收到WebView.onPageFinished回调,因此您还需要在WebViewClient子类中使用此方法:
public class MyWebViewClient extends WebViewClient {
...
@Override
public void onPageFinished(WebView view, String url) {
// Make a note that the page has finished loading.
}
...
}
Run Code Online (Sandbox Code Playgroud)
这里需要注意的是,如果您从服务器收到HTTP错误(例如404或500错误),则无论如何都会调用此回调,只是您在WebView中获得的内容将是服务器错误页面.人们建议如何处理它的不同方法,请参阅此处的答案:如果页面是"未找到404页面",我如何从Android WebView查看?基本上,它实际上取决于您期望的"好"页面和"错误"页面.不幸的是,目前该应用程序无法从WebView获取HTTP响应代码.
回调WebViewClient.onPageStarted和WebViewClient.onProgressChanged,如果你想画一个进度条为您加载的页面是唯一有用的.
另请注意,WebViewClient.shouldOverrideUrlLoading人们通常建议的覆盖方式不正确:
public class MyWebViewClient extends WebViewClient {
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// !!! DO NOT DO THIS UNCONDITIONALLY !!!
view.loadUrl(url);
return true;
}
...
}
Run Code Online (Sandbox Code Playgroud)
少数开发人员意识到,回调也被称为具有非https方案的子帧.如果你遇到类似的问题<iframe src='tel:1234'>,你将最终执行view.loadUrl('tel:1234'),你的应用程序将显示错误页面,因为WebView不知道如何加载tel:URL.如果您希望WebView进行加载,建议只从方法返回false:
public class MyWebViewClient extends WebViewClient {
...
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Returning 'false' unconditionally is fine.
return false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这并不意味着你不应该叫WebView.loadUrl从shouldOverrideUrlLoading根本.要避免的具体模式是对所有URL无条件地执行此操作.
Bha*_*hta -1
您可以使用以下命令检查 URL 是否加载成功onProgressChanged()
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setProgress(progress);
if (progress == 100) {
//your url is loaded successfully
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26470 次 |
| 最近记录: |