window.beforeunload вызывается перед WebViewClient.shouldOverrideUrlLoading - PullRequest
2 голосов
/ 30 апреля 2020

В приложении Android с настроенными WebView и WebViewClient после window.open (url, '_system') , вызванного из js, событие js .beforeunload запускается до вызова Android WebViewClient.shouldOverrideUrlLoading . Это правильное и намеченное поведение? Есть ли способ перехватить открытый URL-адрес без инициированного события window.beforeunload?

1 Ответ

0 голосов
/ 10 мая 2020

см. Пример кода, возможно, вам поможет:

    final WebView webView = (WebView)findViewById(R.id.webview);

    // Enable javascript
    webView.getSettings().setJavaScriptEnabled(true);

    webView.setWebViewClient(new WebViewClient() {

        @SuppressWarnings("deprecation")
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            final Uri uri = Uri.parse(url);
            return customUriHanlder(uri);
        }

        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            final Uri uri = request.getUrl();
            return customUriHanlder(uri);
        }

        private boolean customUriHanlder(final Uri uri) {
            Log.i(TAG, "Uri =" + uri);
            final String host = uri.getHost();
            final String scheme = uri.getScheme();
            // you can set your specific condition
            if (true) {
                // Returning false means that you are going to load this url in the webView itself
                return false;
            } else {
                // Returning true means that you need to handle what to do with the url
                // open web page in a Browser
                final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                startActivity(intent);
                return true;
            }
        }

    });

    // Load the webpage
    webView.loadUrl("https://google.com/");

с функцией customUriHanlder вы можете загрузить свой URL в самом vebview или в браузере.
в документации Google shouldOverrideUrlLoading: Если Предоставляется WebViewClient, возвращение true заставляет текущий WebView прервать загрузку URL, а возвращение false заставляет WebView продолжить загрузку URL как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...