use*_*934 19 java android http-post webview android-webview
我已经看到这个问题浮现在互联网上,但我还没有找到一个有效的解决方案.基本上,我想加载我的应用程序并按下按钮; 然后按钮操作将在已经加载到webview中的网站中填写用户名和密码(或等待onPageFinished).最后,将激活登录页面上的提交按钮.
根据我的理解,这可以通过使用loadUrl(javascript)进行java注入来完成,但我不知道java命令将填充哪些字段.iOS的问题也是一样,但命令略有不同.
是否有可能在webivew中使用javascript做我要求的事情,或者我是否必须在没有像这样或这样的webview的情况下做一个http-post ?
非常感谢您提供的任何帮助!
Gio*_*ova 30
谢谢大家的回答,它帮助了我,但没有奏效.
它总是打开一个白页直到我发现这个:
所以这里完整的解决方案,混合所有在这里和那里找到的信息:
1)首先你必须启用DOM存储,如果你不这样做,.GetElementByXXX将不返回任何内容(你必须在加载页面之前这样做)
myWebView.getSettings().setDomStorageEnabled(true);
Run Code Online (Sandbox Code Playgroud)
2)你在GetElementByXXX上的最后一次Javascript调用必须将结果存储在一个变量中
例1:
_webview.loadUrl("javascript:var uselessvar =document.getElementById('passwordfield').value='"+password+"';");
Run Code Online (Sandbox Code Playgroud)
这里只有一个电话(只有一个分号)所以我们立即将结果存储在'uselessvar'中
示例2:请参阅user802467答案
这里有3个电话(一个用于登录字段,一个用于密码字段,一个用于提交按钮),只有最后一个电话需要存储,它是在'frms'完成的
Javascript程序员应该很容易解释这种行为......
希望这会有所帮助
Cri*_*ian 19
您不需要使用"java命令"......而是使用JavaScript ...例如:
String username = "cristian";
webview.loadUrl("javascript:document.getElementById('username').value = '"+username+"';");
Run Code Online (Sandbox Code Playgroud)
所以基本上,你需要做的是一大串JavaScript代码,它们将获取这些字段并将值放在它们上面; 此外,您可以从JavaScript启用/禁用提交按钮.
use*_*467 18
这有助于我填写表单值并提交表单:
webView.loadUrl("javascript: {" +
"document.getElementById('username').value = '"+uname +"';" +
"document.getElementById('password').value = '"+password+"';" +
"var frms = document.getElementsByName('loginForm');" +
"frms[0].submit(); };");
Run Code Online (Sandbox Code Playgroud)
Vik*_*yan 11
这是完整的代码,适合我(Bitbucket):
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl("http://example.com/");
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
final String password = "password";
final String username = "username";
final String answer = 5;
final String js = "javascript:" +
"document.getElementById('password').value = '" + password + "';" +
"document.getElementById('username').value = '" + username + "';" +
"var ans = document.getElementsByName('answer');" +
"ans[0].value = '" + answer + "';" +
"document.getElementById('fl').click()";
if (Build.VERSION.SDK_INT >= 19) {
view.evaluateJavascript(js, new ValueCallback<String>() {
@Override
public void onReceiveValue(String s) {
}
});
} else {
view.loadUrl(js);
}
}
Run Code Online (Sandbox Code Playgroud)
});
| 归档时间: |
|
| 查看次数: |
35168 次 |
| 最近记录: |