在 Web 视图中插入值

Insert value in a web view

已经有很多关于如何在 Web 视图中插入值的帖子,但在语法方面存在很多混淆。这是一个简单的场景 - 有一个用户名和密码列表,当用户 select 其中一个用户名时,用户名和密码应该插入网页的输入框中。使用的网页是facebook.com。这是网页视图部分的代码。当从列表视图中 selected 用户名时,此代码将激活 -

WebView wb;
wb = (WebView) findViewById(R.id.webView1);
wb.loadUrl(url);
LoginActivity.this.wb.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView wb, String url) {
    wb.loadUrl(url);
    //System.out.println("url activated 1");
    return true;
}

@Override
public void onPageFinished(WebView wb, String url) {
    // TODO Auto-generated method stub
    //System.out.println("page loading finished 1");
    wb.loadUrl("javascript:document.getElementById('email').value = '"+uname+"';document.getElementById('pass').value='"+pass+"';");
}
});

我仍然不知道在 webview 中输入值的语法是否正确。上面的代码不起作用。请帮忙!

更新问题 -

link 中有两个名称标签 - “https://m.facebook.com/login/”为 "email" 和 "name"。我想在单击按钮 b2 时将编辑文本框中的电子邮件和密码作为 ed2 和 ed3 输入到 Web 视图 (wb)。我使用了以下代码 -

 b2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            uname = ed2.getText().toString();
            pass = ed3.getText().toString();

            wb.loadUrl(url);
            wb.getSettings().setJavaScriptEnabled(true);
            wb.getSettings().setDomStorageEnabled(true);
            wb.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView wb, String url) {
                    wb.loadUrl(url);
                    return true;
                }
            });
            wb.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView wb, String url) {
                    // TODO Auto-generated method stub
                    wb.loadUrl("javascript:(function(){document.getElementByTagName('email').value='" + uname
                            + "';document.getElementByTagName('pass').value='" + pass + "';})()");
                }
            });
        }
    });

但它显示了两个错误 -

09-15 11:59:43.555:W/BindingManager(26200):无法调用 determinedVisibility() - 从未见过 pid 的连接:26200

09-15 11:59:43.890: I/chromium(26200): [INFO:CONSOLE(1)] "Uncaught TypeError: document.getElementByTagName is not a function", 来源: (1)

显然语法有问题。请帮忙!

WebView wb;
wb = (WebView) findViewById(R.id.webView1);
wb.loadUrl(url);
LoginActivity.this.wb.setWebViewClient(new OurViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView wb, String url) {
wb.loadUrl(url);
//System.out.println("url activated 1");
return true;
}

@Override
public void onPageFinished(WebView wb, String url) {
// TODO Auto-generated method stub
//System.out.println("page loading finished 1");
wb.loadUrl("javascript:document.getElementById('email').value ='"+uname+"';document.getElementById('pass').value='"+pass+"';");
}
});

请检查我是否更改了 setWebViewClient 方法。所以现在包括你自己的 class 扩展 WebViewClient 如下所示。

public class OurViewClient extends WebViewClient {

public boolean shouldOverride(WebView v,String url){
    v.loadUrl(url);
    return true;

}

我试过了

getElementsByName('login')[0].submit();

但它不起作用。我尝试提交表格它工作正常。

  document.getElementsByTagName('form')[0].submit();

javascript 就像

 "javascript:(
             function()
             {
                document.getElementsByName('email')[0].value='"+uname+"';
                document.getElementsByName('pass')[0].value='"+pass+"';
                document.getElementsByTagName('form')[0].submit();
             })()"

这是代码

 ((Button) findViewById(R.id.button1))
            .setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        uname = ed2.getText().toString();
        pass = ed3.getText().toString();

        WebView wb;
        wb = (WebView) findViewById(R.id.webView1);

        wb.loadUrl(url);
        wb.getSettings().setJavaScriptEnabled(true);

        wb.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView web, String url) {
            // TODO Auto-generated method stub
            //String uname = "email@mail.com";
            //String pass = "******";               
            web.loadUrl("javascript:(function(){document.getElementsByName('email')[0].value='"
                    + uname
                    + "';document.getElementsByName('pass')[0].value='"
                    + pass + "';document.getElementsByTagName('form')[0].submit();})()");
        }
    });
 }
 });