Вопрос

Я загрузил внешний 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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top