2

オープンソースSDKで動作する最初のCordovaプラグインを作成しています。ライブラリにコールバックがないため、コールバックなしで実行する際に問題が発生します(アナリティクスのようなものを考えてください)。さまざまな形式もあり、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()
       }
   })

})();

セットアップ関数は、すべて文字列の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プラグイン形式を見つけましたが、それらすべてを試しましたが、どれも機能しません。それが助けになるなら、私はCordova1.6.1を使用しています。

これが私が模倣しようとしたさまざまな構造のリストです:

それらはすべて同じエラーを生成するので、問題が何であるかはわかりません。

編集:私も言及する必要があります、私のObj-Cコードは呼び出されません。プラグインの実際の機能とは関係のないJS呼び出しに何か問題があります...

4

1 に答える 1

4

さて、フォーマットについて疑問に思っている他の人のために...これが私が得た解決策です:

これは 1.6.1 => 1.9x で動作します (ただし、重大なstack overflowバグがあるため 1.9 は使用しないでください!)

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 に答える