Intereting Posts
Как истек срок действия подписки на Google Play? Правильный способ рисования текста в OpenGL ES 2 SSL-сертификат для веб-служб REST (используется Android)? Как настроить Proguard с помощью Gradle? Что такое пространство имен приложений Android? Как справиться с ограничениями памяти GPU для обработки изображений высокого разрешения на GPU? Не удалось удалить подписку в приложении из моей консоли разработчика Google Play Возможно ли создать службу Android, которая прослушивает аппаратные нажатия клавиш? Произошло слияние Ошибка эмулятора Android: PANIC: Не удалось открыть: C: \ Users \ hallo \ .android / avd / myemu.ini Android – только вертикальная компоновка Содержимое TextView теряется после изменения ориентации экрана Напротив setContentView Как использовать токен, возвращенный GoogleAuthUtil.getToken, с моим брандмауэром App Engine Не удалось добавить окно android.view.ViewRoot$W@44da9bc0 – разрешение отклонено для этого типа окна

WebChromeClient открывает ссылку в браузере

Я искал и читал много сообщений, но не могу понять, как это сделать в моем коде.

Я хочу использовать геолокацию в своем приложении и вам нужно просмотреть в webChromeClient вместо webViewClient, который я использую для html-файлов, и ссылки остаются в одном представлении.

Когда я изменяю это на webChromeClient, html-ссылки, такие как <a href="http://url/file.php?q=123" , неожиданно появляются в браузере!

Как я могу это предотвратить?

 myWebView = new WebView(this); myWebView.getSettings().setJavaScriptEnabled(true); myWebView.getSettings().setLoadWithOverviewMode(true); myWebView.getSettings().setUseWideViewPort(true); myWebView.getSettings().setGeolocationEnabled(true); myWebView.setWebChromeClient(new WebChromeClient() { public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) { callback.invoke(origin, true, false); } }); myWebView.loadUrl("file:///android_asset/HTML/index.html"); setContentView(myWebView); 

Solutions Collecting From Web of "WebChromeClient открывает ссылку в браузере"

WebChromeClient не содержит метод shouldOverrideUrlLoading, который делает WebViewClient. Помните, что «WebView» может и одновременно использовать как WebViewClient, так и WebChromeClient, если это указано. WebViewClient добавляет методы, недоступные вам без назначенного клиента (ведение навигации в веб-просмотре). То же самое с WebChromeClient имеет определенные методы, которые он может использовать (например, получить заголовок страницы при загрузке).

Таким образом, вы можете создать свой код следующим образом:

 WebView web = (WebView)findViewById(R.id.web); WebSettings webSettings = web.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setGeolocationEnabled(true); webSettings.setSupportMultipleWindows(true); // This forces ChromeClient enabled. web.setWebChromeClient(new WebChromeClient(){ @Override public void onReceivedTitle(WebView view, String title) { getWindow().setTitle(title); //Set Activity tile to page title. } }); web.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return false; } }); 

Я смог обойти это, установив фиктивный WebViewClient в дополнение к WebChromeClient. Не уверен, почему, но когда я вынимаю эту строку, веб-страница снова открывается в браузере.

 mBrowser.setWebViewClient(new WebViewClient()); 

Чтобы открывать ссылки в браузере, вы можете использовать intent в методе shouldOverrideUrlLoading для запуска URL-адреса в браузере, а также используя ваш webview для обработки ссылки:

 webView.setWebViewClient(new WebViewClient(){ public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith("http://")) { view.getContext().startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } else { return false; } } } 

Если вы хотите загрузить в webview, используйте:

 WebViewClient yourWebClient = new WebViewClient() { // Override page so it's load on my view only @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // This line we let me load only pages with an anchor tag if ( url.contains("url") == true ) //Load new URL Don't override URL Link return false; // Return true to override url loading (In this case do nothing). return true; } };