使用 WebView 加载 url 后将数据插入表单

Posted

技术标签:

【中文标题】使用 WebView 加载 url 后将数据插入表单【英文标题】:Insert data into form after load url with WebView 【发布时间】:2015-04-07 10:04:44 【问题描述】:

在我用 WebView 加载 url 后,我可以在表单页面中自动插入一些数据吗?

我尝试:

 @Override
            public void onPageFinished(WebView view, String url) 
                String user="pippo";
                String pwd="secret";
                view.loadUrl("javascript:document.getElementById('j_username').value = '"+user+"';document.getElementById('j_password').value='"+pwd+"';");
            

但不起作用..

html 源代码是:

<html>

....
    <form action="/.../" method="post">

                <table align="center">
                <tr>
                <td>
                <table>
                <tr>
                <td>User:</td>
                <td><input name="j_username" type="text" tabindex="1"></td>
                </tr>
                <tr>
                <td>Password:</td>
                <td><input name="j_password" type="password" tabindex="2"></td>
                </tr>
                <tr>
                <td colspan="2"><input type="submit" value="Login" tabindex="3"></td>
                </tr>
                </table>
                </td>
                </tr>
                </table>
                        <!--</form>-->
                        </form>

...
<\html>

【问题讨论】:

你在哪里指定两个表单中的id j_username?我只看到名称、类型和 tabindex 属性.. ops 是的..我必须使用 document.getElementByName 吗? getElementByName() 不存在,您必须使用 getElementsByName 来返回一个集合,并且您必须获取位置 [0] 的用户名和位置 [1] 的元素作为密码。仅当这两个名称属性是您加载的 html 页面中的前两个时,这才有效。如果可以更改 html,我强烈建议您使用 id 属性,它们更精确,并且如果添加 html 代码则不会更改.. @Fondesa 所以如果我尝试使用:javascript:document.getElementsByTagName('INPUT')[0].value = '"+user+"';document.getElementsByTagName('INPUT')[1] .value ='"+pwd+"';" 只有这种形式有效吗? 【参考方案1】:

首先将您的数据放入所有Strings 并将它们转发到您想要的班级:

class MyJavaScriptInterface 

    private Context ctx;

    MyJavaScriptInterface(Context ctx) 
        this.ctx = ctx;
    
@JavascriptInterface
    public void showHTML(String html) throws JSONException 
        System.out.println(html);
        JSONObject jsonResponse = new JSONObject(html);
        String sts = jsonResponse.getString("status");
        if (sts.equals("success")) 
            message = jsonResponse.getString("msg");
            approved_status = jsonResponse.getString("approved");
            jsonObj = jsonResponse.getJSONObject("data");
            user_email = jsonObj.getString("user_email");
            phone_no = jsonObj.getString("phone_no");
            user_gender = jsonObj.getString("gender");
            first_name = jsonObj.getString("first_name");
            last_name = jsonObj.getString("last_name");
            ids = jsonObj.getString("id");
            id = Integer.parseInt(ids);


如果您的最后一页位于 HTML 中,请使用以下代码:

@Override
        public void onPageFinished(WebView view, String url) 

            wb.loadUrl("javascript:window.HtmlViewer.showHTML"
                    + "(document.getElementsByTagName('pre')[0].innerHTML);");
        

【讨论】:

是您从中获取数据的 HTML 页面吗?

以上是关于使用 WebView 加载 url 后将数据插入表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在webview加载完成后将滚动条定位到某一个指定位置

DocuSign API 返回 URL,在重定向后将控制权从 WebView 转移回 React-Native 应用程序

如何在展平嵌套字段后将数据​​从一个 bigquery 表流式插入到另一个表?

使用存储过程将数据插入从其他表派生的表中

创建对象后将对象的 id 插入表中

MaxCompute数据仓库在更新插入直接加载全量历史表三大算法中的数据转换实践