私はJavascriptでWKWebViewを使用してページに項目を追加しています。単純化されたバージョンは次のようになります。Swift/WebKit:Javascriptを使用したWKWebViewでのHTMLの更新
test.htmlという:
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!)
}
}
:のViewControllerで
<!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関数を呼び出しています
新しい「新しいログ項目
」という行が追加され、正しい結果がコンソールに表示されます。
...
<div id="logItems">
Log items:<br>
New log item<br>
</div>
...
ただし、WebViewではアプリケーション内に元のページが表示され、innerHTMLが変更されていないかのように「新しいログ項目」行は表示されません。
以下のように、HTMLファイル内から同じJavascript関数を呼び出すと、WebViewは新しい「新しいログ項目」行で更新され、JavaScriptコードが動作し、問題がway WKWebViewはevaluateJavaScriptメソッドを処理します。
setTimeout(addLogItem,1000);
なぜwebViewはその内容を更新しないのですか?なぜJavaScript関数によって追加された新しい行が表示されないのですか?