Android - открыть целевые _blank ссылки в WebView с внешним браузером
Я построю WebView
, который отображает веб-сайт. Веб-сайт содержит ссылки без атрибута target="_blank"
, а некоторые с ним.
Мне нужно открыть ссылки с target
, определенные во внешнем стандартном браузере устройств, и те, которые без него внутри WebView.
Я использую WebViewClient
, и я пробовал эту функцию, но все мои ссылки открываются в WebView
:
Альтернатива 1:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
Альтернатива 2:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
Кто-нибудь знает, как я могу открыть пустые ссылки извне?
Спасибо!
PS: Чтобы избежать недоразумений: я не могу использовать этот подход, потому что единственный способ, по которому я знаю, что ссылка должна быть открыта externallly, - это атрибут target
.
Ответы
Ответ 1
После посещения вышеуказанных ссылок я придумал этот код и надеюсь, что это поможет.
wv.getSettings().setSupportMultipleWindows(true);
wv.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
{
WebView.HitTestResult result = view.getHitTestResult();
String data = result.getExtra();
Context context = view.getContext();
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
context.startActivity(browserIntent);
return false;
}
});
Ответ 2
У меня была такая же проблема. Я хотел открыть страницы веб-сайтов внутри приложения и оставить все страницы открытыми в браузере по умолчанию. Я использовал одну технику. Если URL-адрес содержит имя моего сайта, я открыл его в WebView и оставил все веб-сайты, открытые в браузере по умолчанию.
Найти ниже код, я надеюсь, что это было бы полезно для всех, кто столкнулся с такими проблемами.
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("/internetgeeks")) {
browser.loadUrl(url);
return false;
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
}
}
Ответ 3
У меня тоже такая же проблема, и теперь я нашел решение.
Вам также нужно использовать WebChromeClient. Вы можете видеть этот и этот.
И вы можете установить WebViewClient в новый WebView и переопределить метод shouldOverrideUrlLoading, тогда вы можете получить URL-адрес и сделать все, что хотите здесь. Если вы не установите WebViewClient, я думаю, что он тоже будет работать. В моем случае я хочу получить URL-адрес, чтобы установить WebViewClient в новый WebView.
Кстати, если вы удалите старый веб-просмотр, а затем, когда вы вернетесь из браузера, веб-просмотр пуст. Поэтому я сохранил веб-просмотр и добавил новый, но установил видимость "ушел".
Ответ 4
private WebView WEB_v;
если вы открываете новое окно, когда нажимаете на ссылку в любом втором окне, то оно открывается другим браузером
WEB_v.getSettings().setSupportMultipleWindows(true);
WEB_v.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, android.os.Message resultMsg)
{
WebView.HitTestResult result = view.getHitTestResult();
String data = result.getExtra();
Context context = view.getContext();
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
context.startActivity(browserIntent);
return false;
}
});