2017-07-17 8 views
0

私は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関数によって追加された新しい行が表示されないのですか?

答えて

0

謎解き。私は何とかビューコントローラーで2番目の目に見えないWebビューを持っていて、目に見えないものでjavascriptメソッドを呼びました。

関連する問題