MessengerDog是Hybrid App开发中,用于iOS的javascript与native通信的实现方案,吸收了Struts2框架Interceptor的理念来实现模块间的耦合。
#import "MDBasePlugin.h"
@interface InfoPlugin : MDBasePlugin
//使用注解公开插件
@Public(InfoPlugin,hello)
- (void)hello {
NSLog("message = %@",self.message);
[self toSuccessCallback];//callback自动回收插件
}
//单例模式需要自己管理内存,手动调用[self gc]回收插件
@Singleton(InfoPlugin,keyboard)
- (void)keyboard {
//show keyboard
}
@end
MDConfig.mdEnableLog = YES;
WKUserScript *userScript = [[WKUserScript alloc] initWithSource:[MDInjectJS js] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
NSString *url = navigationAction.request.URL.absoluteString;
if ([_urlFilter mapping:url webView:webView viewController:self]) {
decisionHandler(WKNavigationActionPolicyCancel);
}else{
decisionHandler(WKNavigationActionPolicyAllow);
}
}
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
if ([MDConfig.mdScriptMessageName isEqualToString:message.name]) {
[_urlFilter mapping:message.body webView:_webView viewController:self];
}
}
@end
function globalSuccessCallback(rs){
alert(rs);
}
function globalFailCallback(rs){
alert(rs);
}
function world(){
var params = {
success:globalSuccessCallback,
fail:globalFailCallback,
message:{
name:"coooliang",
"value":"123"
}
};
window.yyptPlugins.infoPlugin.world(params);
}