HTML文件中有两种类型的链接:
(1) A normal link like http://www.bbb.com/q?type=normal
(2) A short link like /q?type=short.
对于第一种,请直接载入URL。对于第二种,我需要在载入URL之前添加一个固定地址,例如http://www.abc.com。
我正在尝试通过覆盖WebViewClient中的shouldOverrideUrlLoading()函数来实现此操作。然而,对于第二种链接,该函数不会被调用。我尝试在HTML文件中将"http://www.abc.com"添加到第二种链接中。然后,当我点击第二种链接时,函数确实被调用了。
我认为发生的情况是,WebView首先会检查链接是否是有效的URL。只有在它是有效的情况下,这个函数才会被调用。我对吗?我该如何解决这个问题?提前感谢您的帮助。
contentWebView = new WebView(context);
webViewClient = new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// String not in Logger.
Log.d(TAG, "Here!");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
context.startActivity(intent);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (hosted) {
contentWebView.setVisibility(VISIBLE);
} else {
summaryTextView.setVisibility(VISIBLE);
articleLinkButton.setVisibility(VISIBLE);
}
progressBar.setVisibility(View.GONE);
}
};
contentWebView.setWebViewClient(webViewClient);
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.loadData(fullString, "text/html", "utf-8");
contentWebView.setVisibility(GONE);
更多内容:
我尝试修改
contentWebView.loadData(fullString, "text/html", "utf-8");
contentWebView.loadDataWithBaseURL("http://www.abc.com", fullString, "text/html", "utf-8", null);
然后该函数被调用。
如果我手动将html字符串中的短链接更改为完整链接,则该函数也会被调用。
因此,我认为可能是这样发生的:WebView检查链接URL是否有效。只有在URL有效时,才会调用shouldOverrideUrlLoading()函数。