Программный вход пользователя в Flutter WebView

#flutter #webview-flutter

#flutter #webview-flutter

Вопрос:

Я использую 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})
  

Очень признателен за любую помощь в этом. Спасибо.

Комментарии:

1. Я рекомендую вам использовать подход questring, а не javascript (как показано в приведенном ниже коде), поскольку вы сталкиваетесь с несколькими проблемами безопасности. Что-то вроде: «WebViewController.loadUrl (‘ yourdomain.extension?u=user@gmail.comamp;p=xyz ‘ )» все зашифровано, очевидно.

Ответ №1:

Код работает, я поместил его не в то место.

Код должен быть размещен в разделе 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);
                  },
                ),