Cordova插件未定义

Kev*_*vin 6 javascript cordova cordova-plugins

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

之后,我更改了默认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();
Run Code Online (Sandbox Code Playgroud)

不幸的是,它总是记录"cordova.plugins not available".我首先检查了是否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文件(in 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(in myApp/www/index.html)中包含脚本的顺序:

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
Run Code Online (Sandbox Code Playgroud)

编辑:我试图ZeroConf直接从"zeroconf.js"文件访问该对象,但没有成功.

我编辑了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";
    } 
}
Run Code Online (Sandbox Code Playgroud)

但这显示"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 -->
Run Code Online (Sandbox Code Playgroud)

但是,现在我不知道"ZeroConf"是否未定义,因为插件存在一些问题或因为它不能从"index.js"中访问,因为它包含在"index.html"中?

bea*_*ver 7

检查config.xml和cordova-plugin-zeroconf的JS 文件,我发现了这个声明:

<js-module src="www/zeroconf.js" name="ZeroConf">
    <clobbers target="cambiocreative.CDVZeroConfig" />
</js-module>
Run Code Online (Sandbox Code Playgroud)

所以插件 API 应该在这个命名空间可用:cambiocreative.CDVZeroConfig

事实上,截至Cordova 插件文档

... 标签允许在<js-module>

<clobbers target="some.value"/>表示 module.exports 作为 插入到 window 对象中window.some.value。您可以拥有任意数量的<clobbers>。创建窗口上不可用的任何对象。...