我在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()
}
}
答案 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
。在WKWebView
和UIWebView.stringByEvaluatingJavaScript()
之间评估JavaScript代码的主要区别在于前一个调用是
同步,后者是异步的。
比较
WKWebView.evaluateJavaScript()
与
let webView: UIWebView = ...
let result = webView.stringByEvaluatingJavaScript(from: "your javascript goes here")
在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。