如果两者都在代码上,那么shouldOverrideUrlLoading和onPageFinished不起作用,但如果我对其中一个进行评论,那么它是分开工作的

时间:2016-03-11 09:35:45

标签: android webview

这是我遇到问题的代码部分......

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.indexOf("tel:") > -1) {
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
            return true;
        } else {
            return true;
        }
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        view.loadUrl("javascript:replace('window.location.href', 'window.location')");
        view.loadUrl("javascript:replace('document.location.href', 'document.location')");
    }
});

我只是在shouldOverrideUrlLoading添加webview功能,以便在链接是电话号码时拨打电话,并在onPageFinished上添加一些javascript代码来修复一些webviewwindow.location.hrefdocument.location.href ...

的问题

提前感谢所有评论和回复,欢迎修复和替代方案。

2 个答案:

答案 0 :(得分:3)

您可以创建扩展WebViewClient的新类。 试试这段代码

private class MyWebViewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);

        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);

        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
        }

    }

然后在你的onCreate方法中使用。

webView.setWebViewClient(new MyWebViewClient());

在这两个函数都在调用.CheckOut this。

答案 1 :(得分:0)

Dhanyavaad!

我的问题发生在shouldOverrideUrlLoading。当链接不是电话号码时,我正在返回true,现在,如果网址不是电话号码,则返回super.shouldOverrideUrlLoading(view, url);并完美运行。

感谢Shashank你的代码睁开眼睛。

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.indexOf("tel:") > -1) {
            startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
            return true;
        } else {
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
});