Привязать собственное событие iOS к веб-представлению, используя собственный плагин Cordova

Мне нужно создать плагин для перехвата событий, происходящих в веб-представлении Cordova моего iOS-приложения, и запуска действий в нативной части приложения, и наоборот.

Я следовалэтот урок и работает отлично.

Когда я пытаюсь адаптировать его к другому приложению (я хотел, чтобы оно было более общим, чем учебное пособие), оно работает от webView до нативной части, но никак не иначе.

Я просто пытаюсь нажать кнопку на панели навигации, чтобы изменить цвет фона моего веб-вида. На данный момент, похоже, что код JavaScript плагина не получает событие, потому что отображаются только журналы iOS.

Весь мой код в XCode, поэтому я не вижу никаких предупреждений / ошибок из веб-части.

Вот часть плагина для iOS:

@interface HybridBridge()

@property (nonatomic, retain) NSString *listenerCallbackId;

@end

@implementation HybridBridge

-(void)bindAction:(CDVInvokedUrlCommand*) command{

    self.listenerCallbackId = command.callbackId;

    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
    [pluginResult setKeepCallbackAsBool:true];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}

-(void)reportEvent:(NSDictionary*)eventData{
    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:eventData];
    [pluginResult setKeepCallbackAsBool:true];
    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.listenerCallbackId];
}

Вот часть JavaScript плагина:

var HybridBridge = (function() {
    var PLUGIN_NAME                         = "HybridBridge";
    var ACTION_BIND_LISTENER                = "bindAction";

    this.bindListener = function(listener) {
        cordova.exec(listener, listener, PLUGIN_NAME, ACTION_BIND_LISTENER, []);
    };

    return this;
}());

Вот слушатель события javascript:

var NativeEventsListener = (function() {

    this.onReceivedEvent = function(eventData) {

        var eventHandler = function(){};

        switch (eventData.eventType){
            case "colorButtonClicked":
                eventHandler = colorButtonClickEvent;
                break;
            default: 
        }
        eventHandler(eventData);
    };

    function colorButtonClickEvent(eventData){
        changeBackgroundColor(eventData.color);

    }

    function changeBackground(color) {
        document.body.style.background = color;
    }

    return this;
}());

Вот файл main.js, в котором привязывается прослушиватель событий к плагину:

function wlCommonInit(){    

    HybridBridge.bindListener(NativeEventsListener.onReceivedEvent);
}

function wlEnvInit(){
    wlCommonInit();
}

И, наконец, вот вызов плагина в target-C:

- (IBAction)changeWebPageColor {
    redColor = !redColor;
    NSString *color = redColor ? @"red" : @"white";
    HybridBridge *bridge = [self.pluginObjects objectForKey:@"HybridBridge"];
    NSDictionary *eventData = [NSDictionary dictionaryWithObjectsAndKeys:
                               @"colorButtonClicked", @"eventType",
                               color, @"color",
                               nil];
    [bridge reportEvent:eventData];
}

Спасибо за помощь!

Ответы на вопрос(1)

Ваш ответ на вопрос