2017-03-17 74 views
0

如何解決

我的ViewControllerstringByEvaluatingJavaScript在AppDelegate中

使用觀察者我有一個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() } }

+0

您使用的是「UIWebView」還是「WKWebView」? – thm

+0

我正在使用UIWebView,我編輯我的帖子來弄清事情,請幫助我! – Lucas

+0

是什麼樣的致命錯誤?請顯示觸發錯誤的代碼和有關錯誤的信息。 – thm

回答

0

更新:

看來我完全誤解了你的問題。問題不在於如何評估一些JavaScript,而是如何從您的應用程序委託到您的視圖控制器。這些可以幫助你:

原來的答覆:

這取決於您使用的是UIWebViewWKWebView。評估UIWebView.stringByEvaluatingJavaScript()WKWebView.evaluateJavaScript()之間的JavaScript代碼的主要區別在於前者的呼叫同步爲 ,後者爲異步。

比較

let webView: UIWebView = ... 
let result = webView.stringByEvaluatingJavaScript(from: "your javascript goes here") 

let webView: WKWebView = ... 
webView.evaluateJavaScript("your javascript goes here") { (result: Any?, error: Error?) in 
    // handle completion 
} 

請注意:UIWebView API Reference狀態

在在iOS 8的運行和以後的應用程序,使用WKWeb View類,而不是使用UIWeb查看。
[...]
儘管不推薦使用此方法[stringByEvaluatingJavaScript],但最佳實踐是使用WKWeb View類的評估Java腳本(_:completion Handler:)方法的 。

這是由WKWebView's API Reference進一步強調:

重要
中的iOS 8.0和OS X 10.10開始,使用WKWebView Web內容添加到您的應用程序。不要使用UIWebView或WebView。

+0

男人,ty回答我!我編輯了我的帖子來清理事情,我希望你能解決我的問題。 – Lucas