我正在使用带有 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>
在 ViewController 中,我在页面加载完成后调用 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!)
}
}
控制台将打印出正确的结果,并添加了新的“New log item
”行:
...
<div id="logItems">
Log items:<br>
New log item<br>
</div>
...
然而,WebView 仍然显示应用程序中的原始页面,没有“新日志项”行,就好像 innerHTML 从未更改过一样。
如果我从 HTML 文件中调用相同的 Javascript 函数,如下所示,WebView 将更新为新的“新日志项”行,表明 JavaScript 代码有效并且问题与方式有关WKWebView 处理 evaluateJavaScript 方法。
setTimeout(addLogItem,1000);
为什么 webView 不更新它的内容,为什么它不显示由 JavaScript 函数添加的新行?
最佳答案
谜底揭晓。我以某种方式设法在 View Controller 中拥有第二个不可见的 Web View ,并在不可见的 View 中调用了 javascript 方法。
关于javascript - swift/WebKit : Updating HTML in WKWebView with Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135555/