【问题标题】:Insert value in a web view在 Web 视图中插入值
【发布时间】:2015-09-10 04:44:31
【问题描述】:

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

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 中输入值的语法是否正确。上面的代码不起作用。请帮忙!

更新的问题 -

链接中有两个名称标签 - “https://m.facebook.com/login/”作为“电子邮件”和“名称”。我想通过单击按钮 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):无法调用 deniedVisibility() - 从未看到 pid:26200 的连接

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

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

【问题讨论】:

  • 语法仍然不清楚。错误是-“尝试完成输入事件,但输入事件接收器已被释放”
  • @ArpitKumar 检查我的答案

标签: android input android-webview


【解决方案1】:

我试过了

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();})()");
        }
    });
 }
 });

【讨论】:

  • 你好 arun,我尝试了代码,但它不起作用。让我稍微改变一下问题。
  • 非常感谢你。如果您可以添加语法以单击按钮,那就太好了
  • 嘿阿伦,我前面提到的按钮属于facebook页面中的按钮,即登录按钮。
  • 你的意思是使用 Facebook SDK
  • 不。您可以在 web 视图中查看的按钮。我们如何使用javascript调用按钮上的点击事件。
【解决方案2】:
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 方法进行了更改。所以现在包括你自己的扩展 WebViewClient 的类,如下所示。

public class OurViewClient extends WebViewClient {

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

}

【讨论】:

  • 问题是 - 在 webview 的输入框中插入值的语法是什么?你能准确回答吗?谢谢
  • 输入框?您是指地址栏或网站中的任何其他输入框
  • 用户可以输入值的输入框。在上面的链接中,即facebook.com,有两个输入框,一个用于电子邮件,另一个用于密码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多