【问题标题】:How to call an ionic 1 method from iOS cordova plugin如何从 iOS cordova 插件调用 ionic 1 方法
【发布时间】:2019-01-13 06:06:11
【问题描述】:

我为我的ionic-1 应用程序(iOS 平台)创建了一个cordova-plugin。我想从我的objective-cobjective-c 文件的本机iOs 类中调用我的离子项目的js 文件中创建的方法@。

** 请帮助了解我如何实现这一目标? **

【问题讨论】:

  • 您是否使用 plugman 来开发 cordova 插件?通过这个,你可以得到默认的结构。
  • 是的,我是通过 plugman 创建的,但不幸的是,我无法弄清楚如何从本机 objective-C 代码调用 JS 方法。但是,当我通过我的JS code 调用本机objective-c method 时,它工作得非常好。喜欢cordova.plugins.MY_IOS_FILE_NAME.MY_METHOD_NAME

标签: javascript ios objective-c cordova ionic-framework


【解决方案1】:

您应该使用 cordova channeljsnative 之间制作事件协议。您可以从 cordova-plugin-inappbrowser 获取示例。

链接的简要说明

在 javascript 代码中

导入频道库

var channel = require('cordova/channel');

创建以事件名称命名的频道

function InAppBrowser () {
    this.channels = {
        'loadstart': channel.create('loadstart'),
        'loadstop': channel.create('loadstop'),
        'loaderror': channel.create('loaderror'),
        'exit': channel.create('exit'),
        'customscheme': channel.create('customscheme')
    };
}

添加和删除监听函数

InAppBrowser.prototype = {
    addEventListener: function (eventname, f) {
        if (eventname in this.channels) {
            this.channels[eventname].subscribe(f);
        }
    },
    removeEventListener: function (eventname, f) {
        if (eventname in this.channels) {
            this.channels[eventname].unsubscribe(f);
        }
    },
};

在 init 中注册回调(可选)。您也可以在您的应用中执行此操作。

for (var callbackName in callbacks) {
    iab.addEventListener(callbackName, callbacks[callbackName]);
}

在本机代码中

触发事件。

CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}];

[pluginResult setKeepCallback:[NSNumber numberWithBool:YES]];

[self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];

【讨论】:

  • 感谢您的帮助,您能告诉我CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:@{@"type":@"loadstart", @"url":[url absoluteString]}]; [pluginResult setKeepCallback:[NSNumber numberWithBool:YES]]; [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callbackId];[url absoluteString] 是什么吗?
  • inappbrowser 表示互联网上的真实url。在你的情况下,你不需要发送它。
  • 感谢@Hyuck Kang。我刚刚添加了绑定监听器,然后正如您所说,通过插件 Result 发送事件,它工作正常。
猜你喜欢
  • 2019-04-22
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2017-12-18
  • 1970-01-01
相关资源
最近更新 更多