Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌入在WKWebView加载的HTML文件中的Java脚本是否可以访问?_Javascript_Ios_Swift - Fatal编程技术网

Javascript 嵌入在WKWebView加载的HTML文件中的Java脚本是否可以访问?

Javascript 嵌入在WKWebView加载的HTML文件中的Java脚本是否可以访问?,javascript,ios,swift,Javascript,Ios,Swift,我在iOS10应用程序中有一个基本的foo.html。标记是直截了当的: <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>Example</title> <m

我在iOS10应用程序中有一个基本的
foo.html
。标记是直截了当的:

<!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>
在我的iOS应用程序中,我试图访问
变量。按照WKNavigationDelegate的方法确认加载DOM后:
func-webView(\uwebview: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的范围,因为目前为止,它似乎没有访问权限。

我找到了答案-将在这里给出答案,希望它能帮助其他人:

问题就在这里:

webView.loadHTMLString(html!,baseURL:nil)

我必须确保
baseURL
不是nil,以下修复了它:


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

当您遇到错误时,是否显示完全相同的代码
WKJavaScriptExceptionColumnNumber=47
表示传递给
webView.evaluateJavaScript
的JavaScript代码至少有48个字符,但您的
htmlContent
只有16个字符。如果没有显示正确的信息,没有人可以帮助你。这不是确切的代码,但确切的代码目前对上下文没有任何帮助。它正是这个示例所做的,它试图创建一个对象,该对象的名称空间/代码在
bar.js
中可用,除非它似乎无法访问
bar.js
的内容和/或它超出了范围。精确的代码将有助于消除许多轻微错误的可能性。不管怎样,赏金会帮你的。祝你好运,你能告诉我你是如何设计你的WKWebView的吗?您添加到WKWebView的属性是什么?Rest In Peace 500 rep:(@FrankerZ和randombits,表单加载是否正确?
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}