The STMScriptMessageHandler is used to comunicate with js for WKWebView. It implements WKScriptMessageHandler and WKScriptMessageHandlerWithReply protocol. A STMScriptMessageHandler corresponding a js object. When your WKWebView add a STMScriptMessageHandler, the js side add a object on the window automatically. The handlerName of STMScriptMessageHandler is the js object's name.
- Support multi message handlers
- Support Promise
- Compatible with
WebViewJavascriptBridge
iOS 8.0+
//When the native register a STMScriptMessageHandler called `Bridge`, the js register a object called `window.Bridge`.
STMScriptMessageHandler *messageHandler = [[STMScriptMessageHandler alloc] initWithScriptMessageHandlerName:@"Bridge"forWebView:self.webView];
[self.webView stm_addScriptMessageHandler:messageHandler];
// register a message handler named `Page`, so the js should call your method (that the message handler registered) use `window.Page.callMethod...`
STMScriptMessageHandler *page = [[STMScriptMessageHandler alloc] initWithScriptMessageHandlerName:@"Page"forWebView:self.webView];
[self.webView registerScriptMessageHandler:page];
[page registerMethod:@"setButtons"handler:^(id data, STMResponseCallback responseCallback) {
[selfsetupRightBarButtonItems:data callback:responseCallback];
}];
// Use js object `window.Bridge` call native method or register method for native.window.Bridge.callHandler('nslog',data,function(data){log('JS got native `nslog` response',data);});window.Bridge.registerMethod('log',function(data,callback){varmessage=JSON.parse(data);log('Native calling js method `log`',message);callback({key: 'from js',value: 'something'});});// Support Promiseasyncfunctionpromise(data){// window.Bridge.callHandler('nslog', data).then(// result => log('JS got native `nslog` response', result),// error => log('JS got native `nslog` error', error)// )varp=window.Bridge.callHandler('nslog',data);varresult=awaitp;log('JS got native `nslog` response',result);}If you register a message handler named WebViewJavascriptBridge at native side, the js side dones not need modify any code.
// The bridge's name is `WebViewJavascriptBridge`
self.bridge = [self.webView stm_addScriptMessageHandlerUseName:@"WebViewJavascriptBridge"];
STMScriptMessageHandler is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod'STMScriptMessageHandler'STMScriptMessageHandler is available under the MIT license and 996ICU license. See file LICENSE.MIT and LICENSE.NPL for more info.
