首页 > 解决方案 > 如何从在 Android WebView 中打开的网页中单击按钮

问题描述

我想知道是否单击了打印按钮。我在 android WebView 中打开网页如果单击打印按钮,我想获取当前页面的 HTML 源

在此处输入图像描述

在这里我正在设置 WebView 和 onPageFinish 正在加载...我正在从 odoo 服务器加载数据

web_view = (WebView) findViewById(R.id.web_view);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    //web_view.setWebViewClient(new WebViewClient());
    web_view.getSettings().setJavaScriptEnabled(true);
    web_view.getSettings().setLoadWithOverviewMode(true);
    web_view.getSettings().setUseWideViewPort(true);
    web_view.getSettings().setDomStorageEnabled(true);
    web_view.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    web_view.getSettings().setBlockNetworkImage(false);
    web_view.setWebChromeClient(new WebChromeClient());

    web_view.addJavascriptInterface(new MyJavaScriptInterface(this), "ok");

web_view.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            progressBar.setVisibility(View.VISIBLE);
            view.loadUrl(url);

            return true;
        }

        @Override
        public void onPageFinished(WebView view, final String url) {
            progressBar.setVisibility(View.GONE);

            if(view.getTitle().equalsIgnoreCase("POS"))
            {
                web_view.loadUrl("javascript:window.ok.print();");
                web_view.loadUrl("javascript:document.getElementsByClassName('o_main_content')[0].innerHTML+'</html>');");
                web_view.loadUrl("javascript:document.ok.order_printbill=('order-printbill'));");
               

                                         web_view.loadUrl("javascript:window.ok.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");


                web_view.evaluateJavascript(
                        "(function() { return ('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>'); })();",
                                new ValueCallback<String>() {
                                    @Override
                                    public void onReceiveValue(String html) {
                                        JsonReader reader = new JsonReader(new StringReader(html));
                                        Log.d("HTML", "the html or  " + html);
                                        reader.setLenient(true);
                                        try {
                                            if(reader.peek() != JsonToken.NULL) {
                                                if(reader.peek() == JsonToken.STRING) {
                                                    String msg = reader.nextString();
                                                    if(msg != null) {
                                                        

                                                    }
                                                }
                                            }
                                        } catch (IOException e) {
                                            Log.e("TAG", "MainActivity: IOException", e);
                                        } finally {
                                            try {
                                                reader.close();
                                            } catch (IOException e) {
                                                // NOOP
                                            }
                                        }
                                    }
                                });

            }
          
        }

        public void loadEvent(String javascript){

            web_view.loadUrl("javascript:"+javascript);
        }

        public String clickListener(){
            return getButtons()+ "for(var i = 0; i < buttons.length; i++){ buttons[i].onclick = function(){ console.log('click worked.'); ButtonRecognizer.boundMethod('button clicked'); };}";
        }

        private String getButtons(){
            return "var buttons = document.getElementsByClassName('control-button'); console.log(buttons.length + ' buttons'); ";
        }
    });

    web_view.loadUrl("webPageUrl");

这是我的 JavaScriptInterface 类

class MyJavaScriptInterface {

    private Context ctx;

    MyJavaScriptInterface(Context ctx) {
        this.ctx = ctx;
    }

    @JavascriptInterface
    public void print() throws Exception
    {
        Log.d("LOGIN::", "Clicked");
        Toast.makeText(WebViewActivity.this, "Login clicked", Toast.LENGTH_LONG).show();
    }


    @JavascriptInterface           // For API 17+
    public void order_printbill(String strl)
    {
        Log.e("TAG", "the click ssdf " + strl);
    }

    @JavascriptInterface
    public void showHTML(String html) {
        Log.d("TAg", " the html source is " + html);

    }

}

如果单击打印按钮以及单击后如何获取。在单击打印按钮时,我想获取页面的 html 源

标签: javascriptandroidwebviewandroid-webviewandroid-webview-javascript

解决方案


推荐阅读