在WebView中加载Javascript时,Android Java OnPageFinished不起作用

时间:2018-02-27 08:48:21

标签: javascript java android android-webview

我需要从javascript点击按钮生成的网页上获取链接地址。 我以这种方式点击链接

 webView.loadUrl("javascript:(function(){" +
                        "var All = document.getElementsByTagName('img');\n" +
                        "for (var i = 0; i < All.length; i++)       {\n" +
                        "if (All[i].getAttribute('title') == 'Download') {\n" +
                        "var imgButton=All[i];\n" +
                        "e=document.createEvent('HTMLEvents');\n" +
                        "e.initEvent('click',true,true);\n" +
                        "imgButton.dispatchEvent(e);\n" +
                        "}\n" +
                        "}})()");

问题是在运行此代码后,永远不会调用事件OnPageFinished。我曾使用WebChromeClient尝试使用OnProgressChanged,但结果相同。 我需要获取网页的html代码,之后运行javascript任何关于我该怎么做的想法?

1 个答案:

答案 0 :(得分:0)

webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressDialog = new ProgressDialog(Activity.this);
            progressDialog.setMessage("Loading...Please wait");
            progressDialog.setCanceledOnTouchOutside(false);
            progressDialog.show();
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (progressDialog.isShowing()) {
                progressDialog.dismiss();
            }
                view.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(getApplicationContext(), "Oh no! "+description , Toast.LENGTH_SHORT).show();
            super.onReceivedError(view, errorCode, description,failingUrl);
        }
    });

这是方法

    @SuppressWarnings("unused")
class MyJavaScriptInterface {
    private Context ctx;

    MyJavaScriptInterface(Context ctx) {
        this.ctx = ctx;
    }
    @Keep
    @JavascriptInterface
    public void showHTML(String html) {
            try {
            Log.d("html",html);
            }catch (Exception e){
                e.printStackTrace();

            }
        }
    }
}