嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?
Posted
技术标签:
【中文标题】嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?【英文标题】:Will JavaScripts embedded in an HTML file loaded by WKWebView be accessible?嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是否可以访问? 【发布时间】:2017-01-21 02:16:46 【问题描述】:我的 ios 10 应用程序中有一个基本的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>
我用以下内容加载它:
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
变量。 WKNavigationDelegate 方法确认加载 DOM 后: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 的范围,因为截至目前,它似乎没有。
【问题讨论】:
出现该错误时,您显示的代码是否完全相同?WKJavaScriptExceptionColumnNumber=47
表示传递给 webView.evaluateJavaScript
的 JavaScript 代码至少有 48 个字符,但您的 htmlContent
只有 16 个字符。如果没有显示正确的信息,没有人可以帮助您。
这不是确切的代码,但确切的代码现在对上下文没有任何帮助。它正是这个示例正在做的事情,它试图创建一个对象,其命名空间/代码在bar.js
中可用,但它似乎无法访问bar.js
的内容和/或超出范围。
精确的代码有助于消除许多小错误的可能性。无论如何,赏金会帮助你。祝你好运。
@randombits,你能告诉我你是如何设计你的 WKWebView 的吗?您添加到 WKWebView 的属性是什么?
【参考方案1】:
我想通了-将答案放在这里希望对其他人有所帮助:
问题出在这里:
webView.loadHTMLString(html!, baseURL: nil)
我必须确保baseURL
不为零,以下修复它:
webView.loadHTMLString(html!, baseURL: Bundle.main.bundleURL)
【讨论】:
安息吧 500 次代表 :( @FrankerZ 和 randombits,表单加载正确吗?以上是关于嵌入在 WKWebView 加载的 HTML 文件中的 JavaScript 是不是可以访问?的主要内容,如果未能解决你的问题,请参考以下文章
iOS为带有嵌入推文的html字符串计算正确的WKWebview高度
从应用程序的文档目录加载本地 html 文件 swift wkwebview