Щелчок url открывает браузер по умолчанию
Я загрузил внешний URL в мой WebView. Теперь мне нужно, чтобы когда пользователь нажимает на ссылки на загруженной странице, он должен работать как обычный браузер и открыть ссылку в том же WebView. Но это открытие браузера по умолчанию и загрузка страницы там?
Я включил JavaScript. Но все равно это не работает. Я что-то забыл?
6 ответов:
если вы используете
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); } }
официальный документация говорит, нажмите на ссылку в WebView запустит приложение, которое обрабатывает 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());
ответ 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"); }}таким образом, каждая ссылка, нажатая на веб-сайте, будет загружаться внутри вашего WebView. (Используя Android Studio 1.2.2 со всеми обновленными SDK)
метод
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; } }); }
Comments