getElementById returns 即使在页面加载后仍为 null - WkWebView 和 Swift

getElementById returns null even after page is loaded - WkWebView and Swift

我想在加载此 url 后在 ID 为 "Username" 的 WKWebView 的特定元素中输入文本:https://app.oncoursesystems.com/homeworkportal/index/brrsd webview 中的用户名字段应填充我指定的任何值,但每当我 运行 我的代码时,我都会收到此错误:

Error: Optional(Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=TypeError: null is not an object (evaluating 'document.getElementById("Username").value='xxx''), WKJavaScriptExceptionColumnNumber=52, WKJavaScriptExceptionSourceURL=https://app.oncoursesystems.com/homeworkportal/index/brrsd, NSLocalizedDescription=A JavaScript exception occurred})

我尝试 运行在方法 func webView: didFinishNavigation: 下使用我的代码(使用 WKNavigationDelegate),但我得到了同样的错误

这是我的代码(这些都是获得相同结果的不同尝试):

let js = "var myelement = document.getElementById(\"Username\").value='xxx'; myelement.innerHTML= \"New Text\";"
    webView.evaluateJavaScript(js, completionHandler: nil)

webView.evaluateJavaScript("document.getElementById('Username').value='xxx'", completionHandler: nil)

webView.evaluateJavaScript("window.onload = function() { alert(document.getElementById('Username').value='xxx');};", nil)

//I got this error instead for the last one: Error: Optional(Error Domain=WKErrorDomain Code=5 "JavaScript execution returned a result of an unsupported type" UserInfo={NSLocalizedDescription=JavaScript execution returned a result of an unsupported type})

我在 viewDidLoad、webView 上尝试了所有这些:didFinishNavigation:(以确保 html 已加载),然后单击按钮

如何才能成功地用值 'xxx' 填写表单的用户名字段?这是由 link 本身的某些问题引起的还是我的代码有问题?

根据提供的 link,用户名 字段存在于 iFrame 中,这就是 document.getElementById('Username') 返回 null 的原因.

试试这个

document.getElementById('frame').contentWindow.document.getElementById('Username')