解决了
我在 ViewController 中使用了观察者
我在 Swift3 中有一个 iOS webview,需要从 AppDelegate 调用 Js 函数。原因是因为我正在使用推送通知,当用户点击通知时,我需要将信息从 swift3 传递给 JS。
这是我的ZhWebViewController 的头
class ZhWebViewController: UIViewController, UIWebViewDelegate {
func passNotificationToWebView(userInfo: AnyObject){
let jsonData = try! JSONSerialization.data(withJSONObject: userInfo,
options:
JSONSerialization.WritingOptions.prettyPrinted)
let jsonString = NSString(data: jsonData, encoding:
String.Encoding.utf8.rawValue)! as String
self.webView.stringByEvaluatingJavaScript(from:
"triggerNotificationClick(\
(jsonString))")
}
}
这就是我声明我的 UIWebView 的方式
@IBOutlet weak var webView: UIWebView!
这就是我调用JS函数的方式,这种方式有效!!!
self.webView.stringByEvaluatingJavaScript(from: "someFunctionJS(\(jsonString))")
这是我的 AppDelegate 的负责人
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
}
这是我收到通知的地方,在这里我想调用 JS 函数,我尝试在 ZHWebView 中调用一个函数并尝试发送到 JS,但我得到了致命错误。
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate{
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
ZhWebViewController().passNotificationToWebView(userInfo: userInfo as
AnyObject)
completionHandler()
}
}