Reputation: 61
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
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
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