У меня есть WebView в моем приложении, которое отображает страницу, не принадлежащую мне. Мое желаемое поведение заключается в том, что если какая-либо ссылка используется пользователем, запускается приложение браузера устройств, и там загружается результирующая страница. К сожалению, эта страница делает некоторые странные вещи, поэтому shouldOverrideUrlLoading()
не срабатывает.
Мое решение состоит в том, чтобы перехватить javascript в pushState и использовать интерфейс для запуска кода Android для запуска приложения-браузера.
Вот мой интерфейс:
public class LaunchExternalBrowserHack {
Context mContext;
LaunchExternalBrowserHack(Context c) {
mContext = c;
}
@JavascriptInterface
public void launchExternalBrowser(String url) {
openUrl(url);
}
}
Я ввожу некоторый javascript на страницу в onPageFinished()
:
public void onPageFinished(WebView view, String url) {
mWebView.loadUrl(javascript);
}
Вот мой javascript:
private final String javascript = "javascript:history.pushState = function (state, title, url) { console.log(url); console.log(location.href); Uphoria.launchExternalBrowser(location.origin, url); };";
И, конечно же, я добавляю интерфейс к WebView
:
mWebView.addJavascriptInterface(new LaunchExternalBrowserHack(getContext()), "Android");
Итак, это похоже на работу. Приложение Browser запускается, и открывается следующая страница.
Однако WebView также продвигается вперед. Я хочу предотвратить это, но я не могу найти способ предотвратить перемещение WebView, сохраняя при этом URL-адрес пересылки и запуска приложения Browser. Как я упоминал ранее, на этой веб-странице shouldOverrideUrlLoading
срабатывает не.
Идеи?