尝试使用Android Webview中的JavaScript与网站“同步”进行互动

时间:2018-12-21 11:56:37

标签: javascript java forms android-webview

我正在尝试与网站“同步”互动(单击提交按钮时发生的JavaScript事件),以获取textField值。此textField首先不存在。当用户单击HTML表单中的“提交”按钮时生成(实际上有2个按钮:第一个: Id =“ ColumnLeft_ADD_BTN_ID” ,第二个: Id =“ ColumnLeft_GET_BTN_ID” )。 当我使用Javascript模拟点击时,textField不会出现。我收到此错误“未捕获的TypeError:无法读取null的属性'值'”,因为textField不存在。

我已经尝试了HTMLUnit,但是无法使其与Android一起使用。我转向Android WebView。 这是我的代码:

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
final String js = "(function() { " +
            "document.getElementById('ColumnLeft_RES_TB_ID').value='" + group + "';" +
            "document.getElementById('ColumnLeft_ADD_BTN_ID').click();" +
            "document.getElementById('ColumnLeft_GET_BTN_ID').click();" +
            "return document.getElementById('ColumnLeft_FEED_URL_TB_ID').value; " +
            "})();";
mWebView.setWebViewClient(new WebViewClient(){
        public void onPageFinished(WebView view, String url){
            if(Build.VERSION.SDK_INT >= 19){
                view.evaluateJavascript(js, new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) {
                        JsonReader reader = new JsonReader(new StringReader(s));

                        // Must set lenient to parse single values
                        reader.setLenient(true);

                        try {
                            if(reader.peek() != JsonToken.NULL) {
                                if(reader.peek() == JsonToken.STRING) {
                                    String msg = reader.nextString();
                                    Log.d("DEBUG", "msg : " + msg);
                                }
                            }
                        } catch (IOException e) {
                            Log.e("TAG", "MainActivity: IOException", e);
                        } finally {
                            try {
                                reader.close();
                            } catch (IOException e) {
                                // NOOP
                            }
                        }
                    }
                });
            }
        }
    });

0 个答案:

没有答案