簡體   English   中英

Cordova JavaScript插件

[英]Cordova JavaScript Plugins

我開始明白科爾多瓦內部工作的方式越來越多; 我繼續努力的一件事是JavaScript插件的格式。

我習慣於按如下方式編寫JavaScript(據我所知,這是標准慣例):

(function () {
    var version = "EXAMPLE",
        v1,
        v2,
        v3
        res;

    function somePrivateFunction(successCallback, errorCallback) {
        someOtherPrivateFunction(sc, ec);
    }

    function someOtherPrivateFunction(successCallback, errorCallback) {
        cordova.exec(sc, ec, 'SomeService', 'SomeMethod', [args]);
    }

    res = {
        VERSION: version,
        doSomething: function (sc, ec) {
            somePrivateFunction(sc, ec);    
        }
    }

    window.myPlugin = res;
}());

但是,Cordova使用的格式我完全不熟悉。 我認為(我在這里和那里只聽說過這個術語)它使用了一個名為require東西(通過大多數插件頂部的聲明來判斷)。

我經常在官方Cordova插件中看到的格式如下:

    var argscheck = require('cordova/argscheck'),
    utils = require('cordova/utils'),
    exec = require('cordova/exec');

var myPlugin = function () {

}

myPlugin.doSomething = function(successCallback, errorCallback) {
    exec(successCallback, errorCallback, 'SomeService', 'SomeMethod', [args]);
}

myPlugin.doSomethingElse = function(successCallback, errorCallback) {
    exec(successCallback, errorCallback, 'SomeService', 'SomeOtherMethod', [args]);
}

modules.export = myPlugin;

也許是因為我對這個require庫沒有任何了解 - 但是我沒有得到它? 就JavaScript而言,這對我來說似乎完全陌生。

什么是模塊,什么是cordova/[...]語法以及它表示什么。 這些其他cordova模塊在哪里定義(是正確的術語)以及modules從何而來?

最后, modules.export做了什么? 我試圖理解plugin.xml<js-module>標簽和<clobbers>標簽,但這讓我想到了。

我知道當Cordova構建項目時,它會在插件周圍插入cordova.define

也許至少有人可以澄清一下? 謝謝!

require和exec函數是cordova對象的方法。 當您安裝插件時,它會被包含在函數中,以便訪問cordova對象。 那些電話實際上是cordova.require和cordova.exec

以下是安裝前后插件js文件的示例:

之前:

var exec = require("cordova/exec");

var VideoPlayer = {
    play: function(url) {
        exec(null, null, "VideoPlayer", "playVideo", [url]);
    }
};

module.exports = VideoPlayer;

后:

cordova.define("com.dawsonloudon.videoplayer.VideoPlayer", function(require, exports, module) {

    var exec = require("cordova/exec");

    var VideoPlayer = {
        play: function(url) {
            exec(null, null, "VideoPlayer", "playVideo", [url]);
        }
    };

    module.exports = VideoPlayer;

});

另外,要回答有關配置設置的問題,clobbers命令可以保護插件對象的名稱空間。 從我的插件:

<js-module src="www/VideoPlayer.js" name="VideoPlayer">
    <clobbers target="VideoPlayer" />
</js-module>

這是說明我的JS文件的名稱,以及用於在JS中調用我的插件的對象命名空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM