Вопрос:
Итак, прямо сейчас в моем приложении URL-адрес, к которому я обращаюсь, имеет перенаправление, и когда это произойдет, WebView откроет новый браузер вместо того, чтобы оставаться в моем приложении. Есть ли способ изменить настройки, чтобы View перенаправлял URL-адрес, как обычно, но оставался в моем приложении, а не открывал новый браузер?
Edit:
Я хочу перенаправить URL-адрес, я просто не знаю, как его создать, поэтому единственный способ добраться до этого URL-адреса – через один, который приведет к перенаправлению на тот, который я хочу.
Например: Когда вы перейдете сюда: обратите внимание на то, как перенаправить URL-адрес на фактический продукт. В моем приложении, если я открою его в новом браузере, это будет прекрасно, но если я сохраню его в своем приложении с помощью WebView, он будет отображаться, как будто он выполняет поиск k = 9780735622777, например: . ИЛИ, он откроет представление в браузере и покажет, что подходит. Тем не менее, я хочу сохранить все в своем приложении.
Лучший ответ:
Создайте WebViewClient и переопределите метод shouldOverrideUrlLoading.
webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url){ // do your handling codes here, which url is the requested url // probably you need to open that url rather than redirect: view.loadUrl(url); return false; // then it is not handled by default action } }); Ответ №1
Согласно официальной документации, нажатие на любую ссылку в WebView запускает приложение, которое обрабатывает URL-адреса, которое по умолчанию является браузером. Вам нужно переопределить поведение по умолчанию, как это
myWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } }); Ответ №2
Просто добавьте пользовательский WebViewClient по умолчанию. Это заставляет WebView обрабатывать любые загруженные URL-адреса.
mWebView.setWebViewClient(new WebViewClient()); Ответ №3
Вы должны будете установить свой собственный метод переопределения WebviewClient shouldOverrideUrlLoading для вашего веб-просмотра перед загрузкой URL.
mWebView.setWebViewClient(new WebViewClient() { @SuppressWarnings(«deprecation») @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { return shouldOverrideUrlLoading(url); } @TargetApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request) { Uri uri = request.getUrl(); return shouldOverrideUrlLoading(uri.toString()); } private boolean shouldOverrideUrlLoading(final String url) { Log.i(TAG, «shouldOverrideUrlLoading() URL : » + url); // Here put your code return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false. } });
Ознакомьтесь с примером кода для обработки URL-адресов перенаправления и открытия PDF без загрузки в веб-просмотре. https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500
Ответ №4
Создайте класс, который реализует webviewclient, и добавьте следующий код, который позволяет ovveriding строку url, как показано ниже.
Вы можете увидеть эти пример
public class myWebClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }
На вашем конструкторе создайте объект webview, как показано ниже.
web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
Затем добавьте следующий код для выполнения загрузки URL-адресов внутри вашего приложения.
WebSettings settings=web.getSettings(); settings.setJavaScriptEnabled(true); web.loadUrl(«http://www.facebook.com»); web.setWebViewClient(new myWebClient()); web.setWebChromeClient(new WebChromeClient() { // // }
Скачать демо
Ответ №5
Пожалуйста, используйте код Kotlin ниже
webview.setWebViewClient(object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { view.loadUrl(url) return false } })
Для получения дополнительной информации нажмите здесь