Нажав URLS открывает браузер по умолчанию
-
24-09-2019 - |
Вопрос
Я загрузил внешний URL в моем WebView
. Отказ Теперь, что мне нужно, это то, что когда пользователь нажимает на ссылки на загруженной странице, он должен работать как обычный браузер и открыть ссылку в том же WebView
. Отказ Но это открывает браузер по умолчанию и загрузка страницы там?
Я включил JavaScript. Но все же это не работает. Я что-то забыл?
Решение
Если вы используете WebView
Вам придется перехватить самих щелчков, если вы не хотите поведение Android по умолчанию.
Вы можете контролировать события в WebView
с помощью WebViewClient
. Отказ Метод, который вы хотите, это shouldOverrideUrlLoading()
. Отказ Это позволяет выполнять свои собственные действия, когда выбран конкретный URL.
Вы установили WebViewClient
вашей WebView
с использованием setWebViewClient()
метод.
Если вы посмотрите на WebView
Образец в SDK Есть пример, который делает то, что вы хотите. Это так просто, как:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
Другие советы
В некоторых случаях вам может понадобиться переопределение onloadResource, если вы получите перенаправление, который не запускает метод загрузки URL. В этом случае я попробовал следующее:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
Официальный документация Говорит, нажмите на ссылку в веб-просмотре, запустит приложение, которое обрабатывает URL. Вы должны переопределить это поведение по умолчанию
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
или если нет условной логики в методе, просто сделайте это
myWebView.setWebViewClient(new WebViewClient());
Добавьте это 2 строки в свой код -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
Метод boolean shouldOverrideUrlLoading(WebView view, String url)
был устарел в API 24. Если вы поддерживаете новые устройства, которые вы должны использовать boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.
Вы можете использовать оба, делая что-то вроде этого:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
Ответ Arulx Z был именно то, что я искал.
Я пишу приложение с навигационным ящиком с RecyClerview и WebViews, для хранения просмотра веб-просмотра в приложении, независимо от щелчки гиперссылки (таким образом, не запускаем внешний веб-браузер). Для этого достаточно поставить следующие 2 строки кода:
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
Точно под вашим оператором WebView.
Вот пример моего реализованного кода WebView:
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
Таким образом, каждая ссылка на веб-сайте загрузится в ваш веб-просмотр. (Использование Android Studio 1.2.2 со всеми обновленными SDK)