Доступны ли JavaScripts, встроенные в HTML файл, загруженный WKWebView?

У меня есть базовый foo.html в моем приложении iOS 10. Разметка проста:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="x-ua-compatible" content="ie=edge">
        <title>Example</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
        <p>Hello, World!</p>

        <div id="container"></div>
    </body>
    <script type="text/javascript" src="bar.js"></script>
    <script type="text/javascript">
        // Bar is defined in bar.js
        var bar = new Bar();
    </script>
</html>

Я загружаю его следующим образом:

let htmlFile = Bundle.main.path(forResource: "foo", ofType: "html")
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8)
webView.loadHTMLString(html!, baseURL: nil)

В моем приложении iOS я пытаюсь получить доступ к переменной bar. После загрузки DOM, как подтверждено методом WKNavigationDelegate: func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

У меня такой код:

var htmlContent : String {
   var s = "console.log(bar)"

   return s
}

webView.evaluateJavaScript(htmlContent, completionHandler: { result, error in
  if let error = error {
    print("error: \(error)")
  }

  if let result = result {
    print("result: \(result)")
  }
})

В результате я получаю сообщение об ошибке:

error: Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=ReferenceError: Can't find variable: Bar, WKJavaScriptExceptionSourceURL=about:blank, NSLocalizedDescription=A JavaScript exception occurred, WKJavaScriptExceptionColumnNumber=47}

Я пытаюсь сделать это? Должен ли я обращаться к проблеме по-другому? Имеет ли evaluateJavaScript доступ к объему моего DOM после его загрузки, так как сейчас он кажется, что нет.

Ответ 1

Я понял это - поставит здесь ответ, надеясь, что это поможет кому-то другому:

Проблема была здесь:

webView.loadHTMLString(html!, baseURL: nil)

Я должен был гарантировать, что baseURL не равен нулю, следующие исправления:

webView.loadHTMLString(html!, baseURL: Bundle.main.bundleURL)