4

我是 Java 和 Android 的新手,我有一个问题。我认为解决方案可能很容易,但我无法解决。

我用 WebView 创建了一个应用程序,事情是我希望 webview 自动输入用户名和密码,以便用户在启动应用程序时已经登录。我用谷歌搜索并找到了类似的东西,但它不起作用

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    webView = (WebView) findViewById(R.id.webView1);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.loadUrl("https://euterpe.webuntis.com/WebUntis/index.do#main");


webView.setWebViewClient(new WebViewClient ());



class MyWebViewClient extends WebViewClient {
@Override
public void onReceivedHttpAuthRequest(WebView view,
        HttpAuthHandler handler, String host, String realm) {

    handler.proceed("Username", "password");

}
}
4

3 回答 3

0

虽然这是一个老问题,但我想我会发布我的解决方案:

    webView.getSettings().setJavaScriptEnabled(true);   

    webView.loadUrl("http://your.url");

    webView.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:document.getElementsByName('school')[0].value = 'schoolname'");
            view.loadUrl("javascript:document.getElementsByName('j_username')[0].value = 'username'");
            view.loadUrl("javascript:document.getElementsByName('j_password')[0].value = 'password'");

            view.loadUrl("javascript:document.forms['login'].submit()");
        }
    });

它看起来很像本杰明的答案。唯一的区别是[0]部分,选择第一个找到的元素,加上我的实现在触发 javascript 之前等待页面加载。

于 2013-09-11T13:16:56.350 回答
0

你好,请试试这个:

webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("javascript:document.getElementsByName('school').value = 'schoolname'");
webView.loadUrl("javascript:document.getElementsByName('j_username').value = 'username'");
webView.loadUrl("javascript:document.getElementsByName('j_password').value = 'password'");

webView.loadUrl("javascript:document.forms['login'].submit()");

第一行启用 javascript

所有其他行填写表格并最终提交表格。

请查看字符串撇号,我编辑了我的答案。

于 2013-04-17T10:03:54.330 回答
0

代替

webView.setWebViewClient(new WebViewClient ());

webView.setWebViewClient(new MyWebViewClient ());

只有这样,覆盖方法onReceivedHttpAuthRequest才会被调用。

此处理仅适用于 HTTP 身份验证请求。

于 2016-03-07T10:24:42.553 回答