#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);
},
),