脚本消息处理程序不工作
Script message handler not working
我正在尝试注入自定义 WebKit 脚本消息处理程序。我的控制器已正确加载,视图也已正确加载。但是,在 JS 端(从 Safari 控制台),window.webkit.messageHandlers
是空的。知道为什么吗?我的应用程序使用的是 iOS 8.1,但即使升级到 9.2,它也无法正常工作。
import Foundation
import UIKit
import WebKit
public class FooController: UIViewController, WKScriptMessageHandler {
private var wkWebView: WKWebView?
public override func viewDidLoad() {
super.viewDidLoad()
let o = WKUserContentController()
o.addScriptMessageHandler(self, name: "foo")
let config = WKWebViewConfiguration()
config.userContentController = o
self.wkWebView = WKWebView(frame: self.view.bounds, configuration: config)
self.view.addSubview(self.wkWebView!)
self.wkWebView!.loadRequest(NSURLRequest(URL: NSBundle.mainBundle().URLForResource("foo", withExtension: "html")!))
}
public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
print("foo")
}
}
webkit.messageHandlers
不是数组。这是一个 UserMessageHandlersNamespace
.
尝试
var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}}
webkit.messageHandlers.foo.postMessage(message);
在您的消息处理程序中。
public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
let body = message.body
if let dict = body as? Dictionary<String, AnyObject> {
print(dict)
}
}
在下面的 javascript 代码中,消息是必需的。
var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}}
webkit.messageHandlers.foo.postMessage(message);
下面javascript没有消息参数的代码,
webkit.messageHandlers.foo.postMessage();
没有按预期调用 func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)
我正在尝试注入自定义 WebKit 脚本消息处理程序。我的控制器已正确加载,视图也已正确加载。但是,在 JS 端(从 Safari 控制台),window.webkit.messageHandlers
是空的。知道为什么吗?我的应用程序使用的是 iOS 8.1,但即使升级到 9.2,它也无法正常工作。
import Foundation
import UIKit
import WebKit
public class FooController: UIViewController, WKScriptMessageHandler {
private var wkWebView: WKWebView?
public override func viewDidLoad() {
super.viewDidLoad()
let o = WKUserContentController()
o.addScriptMessageHandler(self, name: "foo")
let config = WKWebViewConfiguration()
config.userContentController = o
self.wkWebView = WKWebView(frame: self.view.bounds, configuration: config)
self.view.addSubview(self.wkWebView!)
self.wkWebView!.loadRequest(NSURLRequest(URL: NSBundle.mainBundle().URLForResource("foo", withExtension: "html")!))
}
public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
print("foo")
}
}
webkit.messageHandlers
不是数组。这是一个 UserMessageHandlersNamespace
.
尝试
var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}}
webkit.messageHandlers.foo.postMessage(message);
在您的消息处理程序中。
public func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
let body = message.body
if let dict = body as? Dictionary<String, AnyObject> {
print(dict)
}
}
在下面的 javascript 代码中,消息是必需的。
var message = {"key1":"value1", "key2":"value2", "dictionary": {"name": "foo"}}
webkit.messageHandlers.foo.postMessage(message);
下面javascript没有消息参数的代码,
webkit.messageHandlers.foo.postMessage();
没有按预期调用 func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage)