如何在AppDelegate中使用stringByEvaluatingJavaScript

时间:2017-03-17 13:53:45

标签: ios swift3 uiwebview appdelegate swift3.0.2

解决

我在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() } }

1 个答案:

答案 0 :(得分:0)

<强>更新

我似乎完全误解了你的问题。问题不是如何评估一些JavaScript,而是如何从您的应用程序委托到视图控制器。这些应该可以帮到你:

原始回答:

这取决于您使用的是create_table "furniture_types", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| t.string "name" t.text "comment", limit: 65535 t.datetime "created_at", null: false t.datetime "updated_at", null: false t.json "images" t.boolean "is_inside_type", default: false t.boolean "is_outside_type", default: false end 还是UIWebView。在WKWebViewUIWebView.stringByEvaluatingJavaScript()之间评估JavaScript代码的主要区别在于前一个调用是 同步,后者是异步的。

比较

WKWebView.evaluateJavaScript()

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

请注意UIWebView API Reference

  

在iOS 8及更高版本中运行的应用中,使用WKWeb View类而不是使用UIWeb View   [...]
  虽然不推荐使用此方法[stringByEvaluatingJavaScript],但最佳做法是   改为使用WKWeb View类的评估Java Script(_:completion Handler :)方法。

WKWebView's API Reference进一步强调了这一点:

  

重要
  从iOS 8.0和OS X 10.10开始,使用WKWebView将Web内容添加到您的应用程序。不要使用UIWebView或WebView。