【发布时间】:2017-03-17 13:53:44
【问题描述】:
已解决
我在 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()
}
}
【问题讨论】:
-
您使用的是
UIWebView还是WKWebView? -
我正在使用 UIWebView,我正在编辑我的帖子以使事情变得清晰,请帮助我!
-
这是什么致命错误?请显示触发错误的代码和有关错误的信息。
-
我再次编辑帖子。致命错误是当我尝试在 passNotificationToWebView 中使用 stringByEvaluatingJavaScript 时。错误是:致命错误:在展开可选值时意外发现 nil
-
您创建一个新的
ZhWebViewController实例并在此对象上调用passNotificationToWebView(...)。除其他外,这将导致您的 @IBOutlet webView 为零。您可能希望对从情节提要加载的现有ZhWebViewController实例执行此调用。
标签: ios swift3 uiwebview appdelegate swift3.0.2