向 WKWebView 发送消息抛出错误
Sending message to WKWebView throws error
我正在使用 WKWebView 在我的 Safari 应用程序扩展的弹出窗口中加载 HTML。我正在尝试使用 webView.evaluateJavaScript("myFunction()")
向此页面发送消息,但失败并显示错误消息 EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
。
我以为页面一开始没有加载到 webView 中,因此抛出了这个错误,但这里不是这种情况。该页面已完全加载,但由于某种原因出现此错误。这是我的代码。
@IBOutlet var webView: WKWebView!
func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("myFunction()", completionHandler: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
webView.configuration.userContentController.add(self, name: "popup")
webView.configuration.userContentController.add(self, name: "print")
webView.navigationDelegate = self
view.addSubview(webView!)
self.view = webView
if let url = Bundle.main.url(forResource: "MyPopup", withExtension: "html") {
webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
}
}
我尝试检查 completionHandler 中的错误,但它没有去那里。有什么想法吗?
我相信你需要使用主线程来执行webView中的JS。尝试在 DispatchQueue.main.async { }
.
中包装对 webView.evaluateJavaScript()
的调用
我正在使用 WKWebView 在我的 Safari 应用程序扩展的弹出窗口中加载 HTML。我正在尝试使用 webView.evaluateJavaScript("myFunction()")
向此页面发送消息,但失败并显示错误消息 EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
。
我以为页面一开始没有加载到 webView 中,因此抛出了这个错误,但这里不是这种情况。该页面已完全加载,但由于某种原因出现此错误。这是我的代码。
@IBOutlet var webView: WKWebView!
func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("myFunction()", completionHandler: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
webView.configuration.userContentController.add(self, name: "popup")
webView.configuration.userContentController.add(self, name: "print")
webView.navigationDelegate = self
view.addSubview(webView!)
self.view = webView
if let url = Bundle.main.url(forResource: "MyPopup", withExtension: "html") {
webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
}
}
我尝试检查 completionHandler 中的错误,但它没有去那里。有什么想法吗?
我相信你需要使用主线程来执行webView中的JS。尝试在 DispatchQueue.main.async { }
.
webView.evaluateJavaScript()
的调用