【问题标题】:How to fill fields in web view in android with java and javascript如何使用 java 和 javascript 在 android 的 web 视图中填充字段
【发布时间】:2014-01-28 10:11:20
【问题描述】:

我正在尝试在我的 android web 视图中填写一些字段。但我一直有这个错误01-28 05:06:22.980: E/Web Console(2827): Uncaught TypeError: Cannot set property 'value' of null at null:1

我已经搜索但没有找到一些解决方案。我该如何解决这个问题? 这是我的代码

public void onStart() {
        super.onStart();

        webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());

        String url = "file:///android_asset/index.html";
        webView.loadUrl(url);

        webView.setWebViewClient(new WebViewClient(){

               public void onPageFinished(WebView view, String url) {
                   webView.loadUrl("javascript: {"
                            + "document.getElementById('AddSerialNum').value = '"
                            + ABC
                            + "';"
                            + "document.getElementById('ctl00_PageContent_lblName').value = '"
                            + ABC + "';};");

                }
            });
    }

这是我的 index.html 文件

<!DOCTYPE html>
 <html>

 <body>

 <div style="BORDER-BOTTOM: #dfdfdf 3px solid; PADDING-BOTTOM: 1px; MARGIN-BOTTOM: 10px; HEIGHT: 25px;">
               ......          
                <div style="padding: 10px;">
                    <table width="100%">
                        <tbody><tr>
                            <td>
                                <div style="float: left;">
                                    <div>

                                    <form>Serial Number: <input type="text" name="AddSerialNum"></form><br><br>

                                        <span id="ctl00_PageContent_lblName" style="font-weight:bold;"></span>
                                    </div>......

有没有什么方法可以在以后用java填充字段并获取数据?

提前致谢。

【问题讨论】:

    标签: java javascript android webview


    【解决方案1】:

    使用getElementById,您将获得id 的DOM 元素。 id AddSerialNum 不存在,这是错误告诉你的。 你有一个inputname="AddSerialNum",我想你想得到它。要么添加id,要么使用getElementsByName("AddSerialNum")[0]

    编辑: 就像我已经指出的那样,你必须使用这个:

    webView.loadUrl("javascript: {document.getElementsByName(\"AddSerialNum\")[0].value ='" + ABC + "';};");
    

    getElementsByName 返回一个元素数组,你必须用[0] 获取第一个元素

    【讨论】:

    • 我试过这个webView.loadUrl("javascript: {document.getElementsByName(\"AddSerialNum\").value ='" + ABC + "';};");,但我的字段还是空的
    • 嘿。你能参考任何完整的例子吗?我以前没有使用过这种代码。
    • @bbuecherl 请看这个stackoverflow.com/questions/37644551/…。它需要你的帮助。
    【解决方案2】:

    只是为了添加更多代码作为示例。

        mWebView.setWebViewClient(new WebViewClient() {
                private void setUserEmail(WebView view) {
                    String js = "javascript: {document.getElementsByName(\"recover-email\")[0].value ='" + mEmail + "';};";
                    if (Build.VERSION.SDK_INT >= 19) {
                        view.evaluateJavascript(js, s -> {
                        });
                    } else {
                        view.loadUrl(js);
                    }
                }
    
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    mLoadingProgressBar.setVisibility(View.GONE);
                    setUserEmail(view);
                }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      相关资源
      最近更新 更多