使用evaluateJavaScript将设备令牌发送到WKWebView

时间:2016-06-19 07:00:41

标签: ios swift wkwebview

所以我的整个Swift应用程序都是使用WKWebView构建的。我正在尝试提示用户选择推送通知,然后如果他们接受,则将他们的设备令牌发送到浏览器(通过evaluateJavaScript),以便我可以将其保存到数据库中。

我有提示工作,这是我们选择接收通知后的回调(内部AppDelegate.swift):

var mainView = ViewController()
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

    let characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" )

    let deviceTokenString: String = ( deviceToken.description as NSString )
        .stringByTrimmingCharactersInSet( characterSet )
        .stringByReplacingOccurrencesOfString( " ", withString: "" ) as String

    mainView.sendDeviceTokenId(deviceTokenString);
}

如果我print deviceTokenString,则会成功记录设备令牌。

在我的主ViewController.swift中,我找到了设备令牌后,我的setDeviceTokenId被调用了:

func sendDeviceTokenId(newToken: String) {
    self.deviceToken = newToken
    webView.evaluateJavaScript("saveDeviceIdFromWebview('" + self.deviceToken + "')", completionHandler: nil)
}

self.deviceToken已成功设置,但我的页面上未调用任何Javascript。

我的代码中有很多其他区域使用evaluateJavaScript,除了这一个调用之外,它们都能成功运行。比如这个简单地调用我的webview中的一个函数,该函数从动作列表传递一个保存的用户名:

func loadCredentialsToForm(selectedCredentials: AnyObject) {
    webView.evaluateJavaScript("loadSavedCredentialsFromWebview('" + selectedCredentials["key"] as! String! + "', true)", completionHandler: nil)
}

我决定尝试在我的userContentController内运行调用,它完全调用了我网站中的功能,但不幸的是,由于用户还没有注册通知,因此它被称为太早了

我已设置断点以确保在加载webview后调用sendDeviceTokenId函数,并且在成功加载WKWebView后很长时间内调用它。

我的问题是,一旦用户注册推送通知,为什么不调用我的Javascript函数?

0 个答案:

没有答案