I am trying to inject a custom WebKit script message handler. My controller is correctly loaded and the view as well. However, on the JS side (from the Safari console), window.webkit.messageHandlers
is empty. Any idea why? My app is using iOS 8.1 but even by upgrading to 9.2, it did not work.
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")
}
}
messageHandlers
is an object. But it has no key at all, and especiallyfoo
is missing. – Camenae