我正在尝试从Android中的Webview填充Webforms。 我已经在这里找到了这段代码:Fill fields in webview automatically
String username = "cristian";
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");
不幸的是,我不明白我要打开要填写的页面。
setContentView(R.layout.web);
final WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(url);
String user="u";
String pwd="p";
mWebView.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';");
当我以这种方式尝试时,网站会显示但表格中没有任何值。
提前感谢您的帮助
答案 0 :(得分:21)
Android 4.4新WebView有使用loadUrl("javascript:")
方法的问题,参数字符串将在执行前进行url-decode。
您可以尝试使用evaluateJavascript()
用于API> = 19和loadUrl()
用于API< 19。
下面的代码对我有用。
mWebView.loadUrl(url)
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
String js = "javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';";
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
});
}
请参阅:loadUrl("javascript:....") behaviour changed incompatibly in Android 4.4
答案 1 :(得分:20)
您应该在加载页面后填写值。这是使用您的代码的示例:
mWebView.loadUrl(url);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
String user="u";
String pwd="p";
view.loadUrl("javascript:document.getElementById('username').value = '"+user+"';document.getElementById('password').value='"+pwd+"';");
}
});
答案 2 :(得分:1)
我有同样的问题,在对stackOverflow进行了不同的解释之后,我成功地让我的工作。
这是我的方法
webView.loadUrl(url);
webView.getSettings().setDomStorageEnabled(true);
webView.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url) {
String email="email@email.jp";
//view.loadUrl("javascript:document.getElementById('email').value = '"+email+"'");
view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");
Log.d("email", "can not add email");
}
});
2件事:
1)您需要添加此行webView.getSettings().setDomStorageEnabled(true);
(参考:Android WebView always returns null for javascript getElementById on loadUrl)
2)你需要使用这个view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");
访问php代码中的变量
正如你在我的代码中看到的那样,我使用了@gnpaolo提出的解决方案,但它并没有为我工作所以我对它进行了评论并使用了这个。 (参考:How to inject a String into Android WebView)
最后,只想添加您不需要创建特殊的JavaScript。
另一件事forms[0]
是php表单中变量的位置,在我的情况下,我有用户的电子邮件,所以我写了view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';");
答案 3 :(得分:1)
只需启用DomStorage并将“var x =”写入string:
webview.getSettings().setJavaScriptEnabled(true);
web.getSettings().setDomStorageEnabled(true);
webview.loadUrl(urlString);
webview.setWebViewClient(new WebViewClient(){
public void onPageFinished(WebView view, String url){
super.onPageFinished(view, url);
String js = "javascript:var x=document.getElementById('username').value = '"+user+"';var y=document.getElementById('password').value='"+pass+"';";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
view.loadUrl(js);
}
});