Swift/WebKit:使用 Javascript 在 WKWebView 中更新 HTML



我正在使用带有Javascript的WKWebView向页面添加项目。简化版本为:

测试.html:

<!doctype>
<html>
<head>
<script type="text/javascript">
function addLogItem() {                
document.getElementById("logItems").innerHTML += "New log item<br>"                   
return document.documentElement.innerHTML.toString()
}
</script>
</head>
<body>
<div id = "logItems">
Log items:<br>
</div>
</body>
</html>

在视图控制器中,我在页面加载完成后调用addLogItem函数:

func viewDidLoad() {
webView.navigationDelegate = self
let url = Bundle.main.url(forResource: "test", withExtension: "html")!
webView.load(URLRequest(url: url))
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("addLogItem()") { result, error in            
print(result!)
}
}

控制台将打印正确的结果,并添加新的"新日志项
"行:

...
<div id="logItems">
Log items:<br>
New log item<br>
</div>
...

但是,中的 WebView 仍然显示应用程序中的原始页面,没有"新建日志项"行,就好像内部 HTML 从未更改过一样。

如果我从HTML文件中调用相同的Javascript函数,如下所示,WebView将使用新的"新日志项"行进行更新,这表明JavaScript代码有效,并且问题与WKWebView处理evaluateJavaScript方法的方式有关。

setTimeout(addLogItem,1000);

为什么 webView 不更新其内容,为什么它不显示 JavaScript 函数添加的新行?

谜团解开了。我不知何故设法在视图控制器中拥有第二个不可见的 Web 视图,并在不可见的视图中调用了 javascript 方法。

最新更新