Cordova 插件未定义

新手上路,请多包涵

我正在尝试为 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”中访问?

原文由 Kevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 352
2 个回答

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

 <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 插入到窗口对象中。您可以拥有任意数量的 <clobbers> 。创建窗口上不可用的任何对象。 …

原文由 beaver 发布,翻译遵循 CC BY-SA 3.0 许可协议

您包含的插件可能不使用 cordova.plugin 窗口。只需尝试调用插件函数,并检查它们是否有效。

原文由 Víctor 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题