尝试在 Swift5 的 Web 视图中调用 js 函数时出错
Error when trying to call js function in web view on Swift5
我在浏览网页时遇到问题。
Web视图看起来正常,加载Web视图时启动的js函数调用没有问题。
当您尝试从其他地方调用函数时出现问题。我们找不到问题。
请求函数
其他Screen.swift
DispatchQueue.main.async {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myWebView = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
myWebView.sendToCode(jsonString)
}
WebView.Swift
@IBOutlet var mainWebView: WKWebView!
...
func sendToCode(_ result : String) {
mainWebView.evaluateJavaScript("calljsfunc(\(result))", completionHandler: { (any, err) -> Void in
print(any ?? "no any")
print(err ?? "no Error")
})
}
'mainWebView.evaluateJavaScript' 部分发生错误。
Error is Thread 1: Fatal error: Unexpectedly found nil while
implicitly unwrapping an Optional value
什么叫nil
但是我不加result值也能正常得到结果,报错是一样的。有什么问题?我们该如何解决这个问题?
提前致谢
我认为这是一个视图,而不是像评论所说的那样只是一个函数调用的文件。所以我通过将当前 url 值保存到本地存储并重新加载网络视图来解决问题。
请求函数其他Screen.swift
DispatchQueue.main.async {
self.callJsfunc()
}
func callJsfunc() {
let appDelegate = UIApplication.shared.delegate as? AppDelegate
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let moveScreen = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
moveScreen.modalPresentationStyle = .overCurrentContext
moveScreen.modalTransitionStyle = .crossDissolve
appDelegate?.window?.rootViewController = moveScreen
}
WebView.Swift
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.sendToInAppCode(self.Result)
self.Result = ""
}
我在浏览网页时遇到问题。
Web视图看起来正常,加载Web视图时启动的js函数调用没有问题。
当您尝试从其他地方调用函数时出现问题。我们找不到问题。
请求函数 其他Screen.swift
DispatchQueue.main.async {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let myWebView = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
myWebView.sendToCode(jsonString)
}
WebView.Swift
@IBOutlet var mainWebView: WKWebView!
...
func sendToCode(_ result : String) {
mainWebView.evaluateJavaScript("calljsfunc(\(result))", completionHandler: { (any, err) -> Void in
print(any ?? "no any")
print(err ?? "no Error")
})
}
'mainWebView.evaluateJavaScript' 部分发生错误。
Error is Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
什么叫nil
但是我不加result值也能正常得到结果,报错是一样的。有什么问题?我们该如何解决这个问题?
提前致谢
我认为这是一个视图,而不是像评论所说的那样只是一个函数调用的文件。所以我通过将当前 url 值保存到本地存储并重新加载网络视图来解决问题。
请求函数其他Screen.swift
DispatchQueue.main.async {
self.callJsfunc()
}
func callJsfunc() {
let appDelegate = UIApplication.shared.delegate as? AppDelegate
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let moveScreen = storyboard.instantiateViewController(withIdentifier: "mainWebViewController") as! mainWebViewController
moveScreen.modalPresentationStyle = .overCurrentContext
moveScreen.modalTransitionStyle = .crossDissolve
appDelegate?.window?.rootViewController = moveScreen
}
WebView.Swift
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.sendToInAppCode(self.Result)
self.Result = ""
}