В файле HTML есть два типа ссылок:
(1) A normal link like http://www.bbb.com/q?type=normal
(2) A short link like /q?type=short.
Для первого рода просто загрузите URL. Для второго типа я должен добавить его с фиксированным адресом, например http://www.abc.com, перед загрузкой URL.
Я пытаюсь сделать это с переопределением функции shouldOverrideUrlLoading() в WebViewClient. Однако эта функция не вызывается для второго типа ссылки. Я попробовал добавить http://www.abc.com к второму типу ссылок в файле HTML. Затем функция вызывается, когда я нажимаю второй тип ссылки.
Я думаю, что происходит в 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-адрес будет действительным, вызывается вызов toOverrideUrlLoading().