Ci sono due tipi di collegamenti nel file HTML:WebView shouldOverrideUrlLoading() non chiamato per i collegamenti non validi
(1) A normal link like http://www.bbb.com/q?type=normal
(2) A short link like /q?type=short.
Per il primo tipo, basta caricare l'URL. Per il secondo tipo, dovrei anteporlo a un indirizzo fisso come http://www.abc.com prima di caricare l'url.
Sto provando a farlo con l'override della funzione shouldOverrideUrlLoading() in WebViewClient. Tuttavia questa funzione non viene chiamata per il secondo tipo di collegamento. Ho provato ad anteporre "http://www.abc.com" al secondo tipo di link nel file HTML. Quindi la funzione viene chiamata quando faccio clic sul secondo tipo di collegamento.
Penso che quello che sta succedendo sia che prima WebView verificherà se il link è un url valido. Solo se è valido verrà chiamata la funzione. Ho ragione? Come posso risolvere questo? Grazie in anticipo.
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);
Maggiori informazioni su questo:
Ho provato a cambiare
contentWebView.loadData(fullString, "text/html", "utf-8");
a
contentWebView.loadDataWithBaseURL("http://www.abc.com", fullString, "text/html", "utf-8", null);
Poi la funzione viene chiamata.
Se cambio il collegamento breve a un collegamento completo nella stringa html manualmente. Quindi viene anche chiamata la funzione.
Quindi penso che questo è probabilmente ciò che sta accadendo: Il WebView controlla se l'URL del link è valido. Solo quando l'URL è valido verrà chiamato shouldOverrideUrlLoading().
Potrebbe mostrarci del codice dell'implementazione shouldOverrideUrlLoading()? – shkschneider
@shkschneider Codice aggiunto. Ma il problema è che la funzione non viene chiamata se l'url non è valido. – darklord
Nota dopo la modifica: sì, è esattamente ciò che accade. Prova a fornire una baseUrl – shkschneider