javascript - swift/WebKit : Updating HTML in WKWebView with Javascript

标签 javascript ios swift macos webkit

我正在使用带有 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/

相关文章:

ios - 黑屏出现在呈现的 View Controller 下方

ios - 跳过swift ViewController viewDidDisappear等主要功能

iOS 3rd 方键盘单元字幕

ios - 无法在我的 iOS 应用程序上显示 Google 插页式广告

ios - 无法在 iOS 中解密 AES128

swift - 使用@IBInspectable Swift 4.2 的 UIView 上的 CornerRadius 和 Shadow

javascript - 如何在 ASP.Net MVC 应用程序中获取客户端时区

javascript - 使用下拉列表一次选择一个图表

javascript - 如何在单文件组件中使用新的Vue?

javascript - 带有 jquery 的替代选择框