Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
iOS 8 beta 2
Description
https://developer.apple.com/library/prerelease/ios/releasenotes/General/RN-iOSSDK-8.0/index.html
WKUserContentController - add a script message handler with name "cordova":
https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKUserContentController_Ref/index.html#//apple_ref/swift/cl/WKUserContentController
The WKUserContentController is associated with a WKWebViewConfiguration which is initialized with a WKWebView.
WKUserContentController* userContentController = [[WKUserContentController alloc] init]; // scriptMessageHandler is the object that conforms to the WKScriptMessageHandler protocol // see https://developer.apple.com/library/prerelease/ios/documentation/WebKit/Reference/WKScriptMessageHandler_Ref/index.html#//apple_ref/swift/intf/WKScriptMessageHandler [userContentController addScriptMessageHandler:scriptMessageHandler name:@"cordova"];
In JavaScript, you would call into Objective-C thus:
var command = { callbackId: "blabla23", service:"Camera", action: "takePicture", actionArgs: [ 1, 2, 3 ] }; window.webkit.messageHandlers.cordova.postMessage(command);
In the object that conforms to the WKScriptMessageHandler protocol:
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { if (![message.name isEqualToString:@"cordova"]) { return; } NSDictionary* command = message.body; // TODO: get the callbackId, service, action, actionArgs keys and create a CDVInvokedUrlCommand, and dispatch it }
Attachments
Issue Links
- depends upon
-
CB-7047 [WKWebView] Support config.xml preferences
- Closed
-
CB-7050 [WKWebView] Support loadHTMLString
- Closed
-
CB-7051 [WKWebView][iOS 8] Support evaluateJavaScript:completionHandler:
- Closed
- is a clone of
-
CB-6863 Default Cordova bridge broken due to replacing window.navigator (iOS 8)
- Closed