即使在加载页面之后,getElementById也返回null - WkWebView和Swift

时间:2017-10-01 17:06:04

标签: javascript swift wkwebview

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

  

错误:可选(错误域= WKErrorDomain代码= 4“发生JavaScript异常”UserInfo = {WKJavaScriptExceptionLineNumber = 1,WKJavaScriptExceptionMessage = TypeError:null不是对象(评估'document.getElementById(“Username”)。value = 'xxx''),WKJavaScriptExceptionColumnNumber = 52,WKJavaScriptExceptionSourceURL = https://app.oncoursesystems.com/homeworkportal/index/brrsd,NSLocalizedDescription =发生JavaScript异常})

我尝试在方法 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'成功填写表单的用户名字段?这是由链接本身的某些问题引起的还是我的代码有些错误?

1 个答案:

答案 0 :(得分:0)

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

试试这个

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