Cordova插件未定义

时间:2016-02-15 15:13:21

标签: 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

之后,我更改了默认的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.htmlmyApp/www/index.html)中包含脚本的顺序:

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

编辑:我尝试直接从&#34; zeroconf.js&#34;访问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";
    } 
}

但这显示&#34; ZEROCONF NOT READY&#34; ...

这就是我的索引现在的样子(我只添加了一个带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 -->

然而,现在我不知道&#34; ZeroConf&#34;是未定义的,因为插件存在一些问题,或者因为它无法从内部访问&#34; index.js&#34;因为它包含在&#34; index.html&#34; ?

3 个答案:

答案 0 :(得分:3)

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

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

因此插件API应该在此名称空间中可用: cambiocreative.CDVZeroConfig

实际上从Cordova Plugins documentation开始:

  在<js-module>

中允许

...标记      

<clobbers target="some.value"/>表示module.exports是   以window.some.value的形式插入到窗口对象中。你可以拥有   很多<clobbers>如你所愿。窗口上没有的任何对象是   创建。   ...

答案 1 :(得分:2)

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

答案 2 :(得分:0)

对于那些面对(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>

之前将其复制粘贴。