Я пытаюсь заполнить страницу входа в систему с помощью webView.evaluateJavaScript в кратчайшие сроки.Это работает на некоторых сайтах, но не на других.На сайтах, на которых это не работает, я могу набрать JavaScript в консоли Chrome с положительными результатами, поэтому я предполагаю, что JS верен.Вот пример того, что не работает.
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
guard let jsFile = Bundle.main.url(forResource: "injectCredentials", withExtension: "js") else {
return
}
do {
let injectJS = try String(contentsOf: jsFile)
let formatted = String(format: injectJS, "NKuser", "NKpassword")
webView.evaluateJavaScript(formatted) { (value, error) in
print(value)
}
} catch {
}
}
содержимое injectCredentials
var timeoutSeconds = 30;
var username = "%@";
var password = "%@";
var checkLogin = setInterval(checkLoginFields, 1000);
setTimeout(function() {
clearInterval(checkLogin);
}, timeoutSeconds * 1000);
function checkLoginFields() {
var usernameInput = document.getElementById('ctl02_txtEmpNo');
usernameInput.value = '123558';
}
и, наконец, элемент веб-страницы.
это веб-страница .aspx.Ввод JS выше в консоль Chrome будет вводить текст в текстовое поле, но в приложении iOS ничего не происходит.Однако тот же самый код (с измененным идентификатором элемента) работает на некоторых других веб-страницах входа в систему, которые не являются aspx.
<td style="text-align: left; padding-bottom: 3px;">
<input name="ctl02$txtEmpNo" type="text" maxlength="6" size="20" id="ctl02_txtEmpNo" tabindex="1"><div style="visibility:hidden;display:inline-block;width:1px;overflow:hidden;"><input type="password" name="txtFakePassword" id="txtFakePassword" style="width:1px;"></div>
</td>