Arpit Kumar
Arpit Kumar

Reputation: 61

Insert value in a web view

There have been lot of posts to how to insert value in a web view but there has been lot of confusion regarding the syntax. Here is a simple scenario - there is a list of username and passwords and when the user select one of the username the username and password should be inserted in the input boxes of the webpage. The web page used is facebook.com. Here is the code for web view part. This codes activates when the username is selected from the list view -

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

I still don't know weather the syntax to input the value in the webview is correct on not. The above code is not working. Kindly help!

UPDATED QUESTION -

There are two name tags in the link - "https://m.facebook.com/login/" as "email" and "name". I want to enter the email and password from a edittext boxes as ed2 and ed3 to the web view (wb) on the click of button b2. I used the following code -

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

but it showing two errors -

09-15 11:59:43.555: W/BindingManager(26200): Cannot call determinedVisibility() - never saw a connection for the pid: 26200

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

clearly there is some problem with the syntax. Kindly help!

Upvotes: 0

Views: 3353

Answers (2)

arun
arun

Reputation: 1758

I tried

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

but it doesn't work. I try to submit the form Its working fine.

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

javascript is like

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

Here is the code

 ((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 protected]";
            //String pass = "******";               
            web.loadUrl("javascript:(function(){document.getElementsByName('email')[0].value='"
                    + uname
                    + "';document.getElementsByName('pass')[0].value='"
                    + pass + "';document.getElementsByTagName('form')[0].submit();})()");
        }
    });
 }
 });

Upvotes: 1

irudaya rajasekar
irudaya rajasekar

Reputation: 934

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

Please check that i have made change to the setWebViewClient method. So now include your own class which extends WebViewClient such like below.

public class OurViewClient extends WebViewClient {

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

}

Upvotes: 1

Related Questions