我正在应用程序的 WebView
中加载本地存储的 HTML
文件的内容。该文件中还包含链接,单击该链接时,会在同一 WebView
中加载 URL
。我想在外部浏览器中加载这些链接。我查看了 onPageStarted
和 shouldOverrideUrlLoading
,但它们似乎不起作用。我尝试过以下方法:
webAbout = (WebView) findViewById(R.id.wvAbout);
webAbout.loadUrl(Const.defURL);
webAbout.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
if (!url.startsWith(Const.defURL)) {
view.stopLoading();
// DO SOMETHING
}else{
view.loadUrl(Const.defURL);
}
}
});
我也尝试过:
webAbout = (WebView) findViewById(R.id.wvAbout);
webAbout.loadUrl(Const.defURL);
webAbout.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && (url.startsWith(Const.defURL))){
webAbout.loadUrl(Const.defURL);
return true;
}
else {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return false;
}
}
});
但在这两种情况下,WebView
都不会加载任何内容。知道我哪里出错了吗?
最佳答案
当您希望在 WebView 中加载 URL 时,从 shouldOverrideUrlLoading
返回 false
,如果您不想加载 WebView,则返回 true
URL(这意味着您已经自己以某种方式处理了它)。
请记住:
- 您需要在调用
loadUrl
之前设置WebViewClient
,
对于传递给 shouldOverrideUrlLoading
不会被调用。
loadUrl
的 URL,您的代码应该可以进行一些修改:
webAbout.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url != null && (url.startsWith(Const.defURL))){
return false;
} else {
view.getContext().startActivity(
new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
}
});
// I'm assuming Const.defURL doesn't need escaping.
String customHtml = "<html><body><a href=\"" + Const.defURL + "\">Load url in webview</a><a href=\"http://stackoverflow.com/\">load in browser</a></body></html>";
// Here you would normally load your page using loadUrl,
webAbout.loadData(customHtml, "text/html", "UTF-8");
编辑:方法 boolean shouldOverrideUrlLoading(WebView, String)
已标记为已弃用,文档建议使用 boolean shouldOverrideUrlLoading(WebView, WebRequest)
相反。 但是,新方法永远不会被调用。您仍然需要重写 boolean shouldOverrideUrlLoading(WebView, String)。
关于android - WebView - 在外部浏览器中加载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21824785/