在Flutter WebView中以编程方式登录用户

问题描述

我正在使用webview_flutter。

我目前在我的应用程序中有一个本机登录页面,其中包含用户名和密码。我试图找到一种自动在webview的特定页面上填写用户名和密码并提交登录请求的方法。

尝试这样做

webViewController.evaluateJavascript(
                          '''
     var email = document.getElementById("CustomerEmail");
     var password = document.getElementById("CustomerPassword");
     email.value = "user@gmail.com";
     password.value = "test123";
   '''
                      );

但出现以下错误:

Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=3,WKJavaScriptExceptionMessage=TypeError: null is not an object (evaluating 'email.value = "user@gmail.com"'),WKJavaScriptExceptionColumnNumber=11,WKJavaScriptExceptionSourceURL=undefined,NSLocalizedDescription=A JavaScript exception occurred})

非常感谢您提供的任何帮助。谢谢。

解决方法

代码有效,我把它放在错误的位置。

代码应放在onPageFinished下。我以前在onWebViewCreated下拥有它。

以下代码正常工作。

            WebView(
                  initialUrl: widget.url,onPageFinished: (_) {
                    setState(() {
                    print("loggedin " + loggedIn.toString());

                    if(loggedIn == false) {
                      loggedIn = true;
                        _controller.future
                            .then((value) =>
                            value.evaluateJavascript('''
                             var email = document.getElementById("CustomerEmail");
                             var password = document.getElementById("CustomerPassword");
                             email.value = "user@gmail.com";
                             password.value = "test123";
                             document.getElementById('customer_login').submit();
                           '''));
                        
                      }

                      
                    });
                  },javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController webViewController) {
                    _controller.complete(webViewController);
                  },),

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...