android встроенный - При щелчке по URL-адресам открывается браузер по умолчанию




вк webview (6)

Я загрузил внешний URL в свой WebView . Теперь мне нужно то, что когда пользователь нажимает на ссылки на загруженной странице, он должен работать как обычный браузер и открывать ссылку в том же WebView . Но он открывает браузер по умолчанию и загружает страницу там?

Я включил JavaScript. Но все же это не работает. Я что-то забыл?


Answers

Метод 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;
        }
    });
}

Официальная documentation говорит, щелкните по ссылке в WebView, чтобы запустить приложение, которое обрабатывает URL-адреса. Вам необходимо переопределить это поведение по умолчанию

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

или если в методе нет условной логики, просто сделайте это

myWebView.setWebViewClient(new WebViewClient());

в некоторых случаях вам может потребоваться переопределить 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 вам придется перехватывать клики самостоятельно, если вы не хотите поведения по умолчанию Android.

Вы можете отслеживать события в WebView с помощью WebViewClient . Метод, который вы хотите, shouldOverrideUrlLoading() иметь 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;
    }
}

Добавьте это 2 строки в свой код -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

Если есть кто-то, кто хочет конкатенировать URL и хэш-тег, объедините две функции:

var pathname = window.location.pathname + document.location.hash;




android url android-webview android-websettings