Es gibt zwei Arten von Links in der HTML-Datei:WebView shouldOverrideUrlLoading() nicht für ungültige Links genannt
(1) A normal link like http://www.bbb.com/q?type=normal
(2) A short link like /q?type=short.
Für die erste Art, laden Sie einfach die URL. Für die zweite Art sollte ich es vor dem Laden der URL mit einer festen Adresse wie http://www.abc.com voranstellen.
Ich versuche dies durch Überschreiben der Funktion shouldOverrideUrlLoading() in WebViewClient. Diese Funktion wird jedoch nicht für den zweiten Linktyp aufgerufen. Ich habe versucht, die "http://www.abc.com" auf die zweite Art von Links in der HTML-Datei vor. Dann wird die Funktion aufgerufen, wenn ich auf die zweite Art von Link klicke.
Ich denke, was passiert ist, wird WebView zuerst überprüfen, ob der Link eine gültige URL ist. Nur wenn es gültig ist, wird die Funktion aufgerufen. Habe ich recht? Wie kann ich das lösen? Danke im Voraus.
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);
Mehr dazu:
versuchte ich
contentWebView.loadData(fullString, "text/html", "utf-8");
zu
contentWebView.loadDataWithBaseURL("http://www.abc.com", fullString, "text/html", "utf-8", null);
Dann ist die Funktion aufgerufen wird, zu ändern.
Wenn ich die kurze Verbindung zu einem vollständigen Link in der HTML-Zeichenfolge manuell ändern. Dann wird die Funktion auch aufgerufen.
Also ich denke, das ist wahrscheinlich was passiert: Das WebView überprüft, ob die Link-URL gültig ist. Nur wenn die URL gültig ist, wird die shouldOverrideUrlLoading() aufgerufen.
Können Sie uns etwas Code Ihrer Implementierung von shouldOverrideUrlLoading() zeigen? – shkschneider
@shkschneider Code hinzugefügt. Aber das Problem ist, dass die Funktion nicht aufgerufen wird, wenn die URL nicht gültig ist. – darklord
Hinweis nach dem Bearbeiten: Ja, genau das passiert. Versuchen Sie, eine BaseUrl – shkschneider