При нажатии на URL открывается браузер по умолчанию
209
Я загрузил внешний URL в мой WebView. Теперь мне нужно то, что когда пользователь нажимает на ссылки на загруженной странице, он должен работать как обычный браузер и открывать ссылку там же WebView. Но он открывает браузер по умолчанию и загружает страницу там?
Я включил JavaScript. Но все равно это не работает. Я что-то забыл?
Если вы используете, WebViewвам придется самостоятельно перехватывать щелчки, если вы не хотите использовать поведение Android по умолчанию.
Вы можете отслеживать события в WebViewиспользовании WebViewClient. Метод, который вы хотите, это shouldOverrideUrlLoading(). Это позволяет вам выполнять свои собственные действия при выборе определенного URL.
Похоже, что это поведение по умолчанию для WebViewClientи не требует подклассов, если это все, что вы делаете. Я получил это на работу, просто делаяmyWebView.setWebViewClient(new WebViewClient());
Адам
7
@ dave-webb, пожалуйста, обновите образец, чтобы он не вызывал loadUrl. Все, кто читает это - пожалуйста, не повторяйте код (возвращайте false из обратного вызова вместо вызова view.loadUrl). Вызов loadUrl представляет собой небольшую ошибку, когда, если у вас есть какой-либо iframe на странице с URL-адресом пользовательской схемы (скажем, <iframe src = "tel: 123" />), он будет перемещать основной фрейм вашего приложения по этому URL-адресу, скорее всего, нарушая приложение как побочный эффект.
marcin.kosiba
1
@ Adam ++ - да, я тоже это заметил - я не мог понять, почему одно из моих веб-представлений НЕ использует системный браузер, а потому, что я добавил в него новый веб-клиент, который переопределял только ДРУГОЙ метод. Это заняло у меня некоторое время для отладки.
Питер Айтай
Можем ли мы реализовать что-то вроде: onLongClick, открывать ссылки во внешнем браузере?
TheOnlyAnil
54
в некоторых случаях вам может потребоваться переопределение onLoadResource, если вы получаете перенаправление, которое не вызывает метод загрузки URL. в этом случае я попробовал следующее:
@Overridepublicvoid onLoadResource(WebView view,String url){if(url.equals("http://redirectexample.com")){//do your own thing here}else{super.onLoadResource(view, url);}}
Это круто! Это избавило меня от многих часов попыток понять, как воспроизвести файл MP3 по ссылке в веб-просмотре. Большое спасибо!
Бриганте
25
Официальная документация гласит: нажмите на ссылку в WebView, чтобы запустить приложение, которое обрабатывает URL-адреса. Вам нужно переопределить это поведение по умолчанию
Метод boolean shouldOverrideUrlLoading(WebView view, String url)не рекомендуется в API 24. Если вы поддерживаете новые устройства, вы должны использовать boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request).
Вы можете использовать оба, делая что-то вроде этого:
Я пишу приложение с помощью Navigation Drawer с recyclerview и webviews, чтобы веб-браузер оставался внутри приложения независимо от нажатых гиперссылок (таким образом, не запускается внешний веб-браузер). Для этого достаточно поставить следующие 2 строки кода:
WebViewClient
и не требует подклассов, если это все, что вы делаете. Я получил это на работу, просто делаяmyWebView.setWebViewClient(new WebViewClient());
в некоторых случаях вам может потребоваться переопределение onLoadResource, если вы получаете перенаправление, которое не вызывает метод загрузки URL. в этом случае я попробовал следующее:
источник
Официальная документация гласит: нажмите на ссылку в WebView, чтобы запустить приложение, которое обрабатывает URL-адреса. Вам нужно переопределить это поведение по умолчанию
или если в методе нет условной логики, просто сделайте это
источник
Добавьте эти 2 строки в свой код -
источник
Метод
boolean shouldOverrideUrlLoading(WebView view, String url)
не рекомендуется в API 24. Если вы поддерживаете новые устройства, вы должны использоватьboolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.Вы можете использовать оба, делая что-то вроде этого:
источник
Ответ Arulx Z был именно тем, что я искал.
Я пишу приложение с помощью Navigation Drawer с recyclerview и webviews, чтобы веб-браузер оставался внутри приложения независимо от нажатых гиперссылок (таким образом, не запускается внешний веб-браузер). Для этого достаточно поставить следующие 2 строки кода:
mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());
именно под вашим утверждением WebView.
Вот пример моего реализованного кода WebView:
таким образом, каждая ссылка, нажатая на веб-сайте, будет загружена в ваш WebView. (Использование Android Studio 1.2.2 со всеми обновлениями SDK)
источник