簡體   English   中英

Cordova 插件未定義

[英]Cordova plugins undefined

我正在嘗試為 Cordova 使用 ZeroConf 插件。 我以前從未使用過任何 Cordova 插件。

這些是我做的步驟:

cordova create myApp
cordova platform add android
cordova platform add ios
cordova platform add browser
cordova plugins add https://github.com/cambiocreative/cordova-plugin-zeroconf

之后,我更改了默認的onDeviceReady函數,以便“index.js”文件(在myApp/www/目錄中)如下所示:

var app = {
    ...

    onDeviceReady: function() {
        app.receivedEvent('deviceready');

        if(cordova && cordova.plugins) {
            console.log('cordova.plugins is available');
        } else {
            console.log('cordova.plugins NOT available');
        }
    },

    ...
};

app.initialize();

不幸的是,它總是記錄“cordova.plugins 不可用”。 我首先檢查了cordova存在並且確實存在,但是cordova.plugins是未定義的。 請注意,我正在瀏覽器( cordova run browser )中對此進行測試以找到問題,一旦cordova.plugins不再未定義,我將能夠使用ZeroConf插件。

我搜索了幾個小時,閱讀了很多類似的主題,但沒有一個對我有幫助。

我試過的:

  • cordova plugin ls --> ZeroConf 插件存在com.cambiocreative.cordova.plugin.zeroconf 1.0.9 "Cordova ZeroConf Plugin"

  • 驗證index.html加載了cordova.js腳本

  • 我編輯了config.xml文件(在myApp/www/config.xml )並添加了<plugin name="com.cambiocreative.cordova.plugin.zeroconf" version="1" /> ,但這沒有幫助。 也試過<feature name="ZeroConf"><param name="android-package" value="com.cambiocreative.cordova.plugin.ZeroConf" /><param name="onload" value="true" /></feature>沒有成功。

這是我在index.html (在myApp/www/index.html )中包含腳本的順序:

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>

編輯:我嘗試直接從“zeroconf.js”文件訪問ZeroConf對象,但沒有成功。

我編輯了onDeviceReady函數:

onDeviceReady: function() {
    app.receivedEvent('deviceready');

    var el = document.getElementById("zcOK");

    if(typeof ZeroConf !== 'undefined') {
        el.innerHTML = "ZEROCONF READY";
    } else {
        el.innerHTML = "ZEROCONF NOT READY";
    } 
}

但這會顯示“ZEROCONF NOT READY”...

這就是我的索引現在的樣子(我只添加了一個帶有id="zcOK"的段落來顯示上面的內容)。

<p id="zcOK">ZeroConf test</p>
<!-- ORDER IN WHICH THE SCRIPTS ARE LOADED -->
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="../plugins/com.cambiocreative.cordova.plugin.zeroconf/www/zeroconf.js"></script>
<script type="text/javascript" src="js/index.js"></script> <!-- Contains the onDeviceReady function -->

但是,現在我不知道“ZeroConf”是否未定義是因為插件存在一些問題,還是因為它包含在“index.html”中而無法從“index.js”中訪問?

檢查config.xml和 cordova-plugin-zeroconf 的JS 文件,我發現了這個聲明:

<js-module src="www/zeroconf.js" name="ZeroConf">
    <clobbers target="cambiocreative.CDVZeroConfig" />
</js-module>

所以插件 API 應該在這個命名空間可用: cambiocreative.CDVZeroConfig

事實上,截至Cordova 插件文檔

... <js-module>中允許使用標簽:

<clobbers target="some.value"/>表示 module.exports 作為window.some.value插入到 window 對象中。 您可以擁有<clobbers> 創建窗口上不可用的任何對象。 ...

可能您包含的插件不使用 cordova.plugin 窗口。 只需嘗試調用插件函數,然后檢查它們是否有效。

對於那些面臨(cordova.plugins === undefined) ,但 100% 應該是。

/src/plugins/plugin_name/plugin.xml
找到這樣的標簽:

<js-module src="www/plugin_name.js" name="Plugin_name">
    <clobbers target="cordova.plugins.plugin_name" />
</js-module>

/scr/config.xml
如果標簽不存在,只需在</widget>之前復制粘貼它

暫無
暫無

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

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