MessengerDog 1.0.1

MessengerDog 1.0.1

Maintained by coooliang.



  • By
  • chenliang

MessengerDog



1.继承MDBasePlugin

#import "MDBasePlugin.h"

@interface InfoPlugin : MDBasePlugin

2.使用注解将插件的方法公开

//使用注解公开插件
@Public(InfoPlugin,hello)
- (void)hello {
    NSLog("message = %@",self.message);
    [self toSuccessCallback];//callback自动回收插件
}

//单例模式需要自己管理内存,手动调用[self gc]回收插件
@Singleton(InfoPlugin,keyboard)
- (void)keyboard {
    //show keyboard
}

@end

3.[MDInjectJS js]获得js内容,并向WKWebView注入js

MDConfig.mdEnableLog = YES;
WKUserScript *userScript = [[WKUserScript alloc] initWithSource:[MDInjectJS js] injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];

4.WKWebView拦截url

#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

5.HTML中调用插件

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);
}