2

我正在创建我的第一个 Cordova 插件以使用开源 SDK。我在没有回调的情况下运行它时遇到了问题,因为库没有任何东西(想想分析之类的东西)。还有很多不同的格式,wiki 已经有 2 年历史了,所以我不确定做事的正确方法是什么。

我尝试了几种不同的插件设置变体,但没有一个能成功。

我的.js:

;(function(){

    if (Cordova.hasResource("myPlugin")) return

    Cordova.addResource("myPlugin")

    function MyPlugin() {
    }

    MyPlugin.prototype.setup = function(types) {
        return Cordova.exec("MyPlugin.setup", types);
    };

    Cordova.addConstructor(function() {
        if(!window.plugins)
        {
            window.plugins = {};
        }

       if (!window.plugins.myPlugin) {
           window.plugins.myPlugin = new MyPlugin()
       }
   })

})();

setup 函数有 4 个参数,都是字符串。我将 MyPlugin.js 包含在 index.html 文件中,然后在 onDeviceReady() 中调用:

window.plugins.myPlugin.setup('xxx-x-xxx','xxxx','xxxx','xxxx');

每当我尝试运行时,我都会收到错误消息[INFO] Error in success callback: NetworkStatus0 = TypeError: 'undefined' is not an object

我试过谷歌搜索和诸如此类的东西,发现了几种不同的PhoneGap插件格式,我都试过了,都没有。如果有帮助,我正在使用 Cordova 1.6.1。

这是我尝试模仿的不同结构的列表:

它们都产生相同的错误,所以我不确定问题是什么。

编辑:我还应该提到,我的 Obj-C 代码没有被调用。JS调用与插件的实际功能无关...

4

1 回答 1

4

好的,对于其他想知道格式化的人来说……这是我得到的解决方案:

这适用于 1.6.1 => 1.9x(但不要使用 1.9,因为它有一个严重的stack overflow错误!)

var MyPlugin() = function() {};

MyPlugin.prototype.setup = function(types) {
    return Cordova.exec("MyPlugin.setup", types);
};

cordova.addConstructor(function() {
    if (!window.Cordova) {
        window.Cordova = cordova;
    };

    if(!window.plugins) window.plugins = {};

    window.plugins.myPlugin = new MyPlugin();
});

在 Cordova 2.0 中,addConstructor已删除并且不需要检查 Cordova。

var MyPlugin() = function() {};

MyPlugin.prototype.setup = function(types) {
   return Cordova.exec("MyPlugin.setup", types);
};

//Keep at bottom but remove the addConstructor for Cordova 2+
if(!window.plugins) window.plugins = {};
window.plugins.myPlugin = new MyPlugin();
于 2012-05-14T17:17:04.770 回答