Я думаю, что вариант вашего исходного предложения, вероятно, будет лучше, если вы не хотите изменять существующий URL.
Используйте addJavaScriptInterface
, чтобы добавить класс для обработки загрузки вашего внешнего URL.Внутренний класс может выглядеть так:
public class JavaScriptInterface {
public void viewExternalUrl(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
}
И, конечно, добавив его:
webView.addJavascriptInterface(new JavaScriptInterface(), "Android");
Добавьте JavaScript, чтобы добавить обработчики кликов для вызова вашего интерфейса JavaScript после загрузки страницы (используяJQuery для простоты) через loadUrl
.Вы можете определить окончание загрузки страницы, создав пользовательский WebViewClient
и переопределив onPageFinished
.
webView.setWebViewClient(new WebViewClient() {
private static final String sJs = "javascript:" +
Uri.encode("$('a[@rel$='external']').click(function(){ Android.viewExternalUrl($(this).attr('href')); });");
@Override
public void onPageFinished(WebView view, String url) {
webView.loadUrl(sJs);
}
}
Я не тестировал ни один из этого кода, но это должно работать, если у вас на странице загружен JQuery.Если нет, вы, вероятно, можете придумать некоторый JavaScript для манипулирования DOM без него, или вы можете использовать loadUrl, чтобы сначала вручную загрузить JQuery перед загрузкой JavaScript.
Обратите внимание, что этот подход полностью отказывается от любого использованияиз shouldOverrideUrlLoading