WKWebview valuJavaScript in swift работает только на некоторых сайтах - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь заполнить страницу входа в систему с помощью 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>

1 Ответ

0 голосов
/ 25 октября 2018

valuJavaScript работает только для данных текущей страницы, если вы хотите сделать некоторые вызовы, например, хотите оценить сценарий входа в систему, который возвращает, он никогда не вернет вам значение, так что для перехвата использования входа обратного вызова.какой-то другой обработчик, чтобы увидеть поведение логина.

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    if let url = webView.url, let host = url.host {
          if (url.path == loginPath) {
                if let username = self.username, let password = self.password {
                    let js = String(format: "js script", username, password)
                    webView.evaluateJavaScript(js, completionHandler: nil)
                }
            } else if (url.path == "error path") {
                // Login failed
            }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...