2016-02-15 338 views
4

我想为科尔多瓦使用ZeroConf插件。 我以前从未使用任何Cordova插件。科尔多瓦插件undefined

这些都是我做的步骤:

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 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脚本

  • 我编辑的​​3210文件(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.js”中访问,因为它被列入“指数.html“?

+0

cordova插件在浏览器中不工作;您必须在设备或设备模拟器上测试它们。 –

+0

@GeorgeStocker谢谢,我正在想那样的事情。然而,我也在iPhone模拟器中做了测试(通过运行cordova制作的xcode项目并显示'cordova.plugins'的值,但它也是'undefined')。 – HyperZ

回答

2

审视config.xml和科尔多瓦 - 插件 - 零配置的JS file我发现这个声明:

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

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

在其实截至Cordova Plugins documentation

... tags are allowed within <js-module> :

<clobbers target="some.value"/> indicates that the module.exports is inserted into the window object as window.some.value . You can have as many <clobbers> as you like. Any object not available on window is created. ...

+0

非常感谢!这为我解决:) – HyperZ

+0

你有任何线索为什么调用'cambiocreative.CDVZeroConfig.register(...);'给我在控制台中的错误? 'HelloCordova [14770:2190065]错误:方法'register:'未在Plugin'ZeroConf''中定义。我列出了'cambiocreative.CDVZeroConfig'的所有方法,它包含注册字段(方法)...我认为它与“zeroconf.js”文件有关,例如, '返回exec(成功,失败,“ZeroConf”,“列表”,[类型,超时]);'和ZeroConf不再是正确的名称或类似的东西? – HyperZ

+0

我已经看到,该插件有几个存储库(另一个是https://github.com/vstirbu/ZeroConf/):JS中的定义是相同的。对ZeroConf对象的引用(内部为zeroconf.js)显示正确。不幸的是,我不知道这个插件及其目的。也许如果你分享一段代码,我可以尝试... – beaver

1

可能是您包含的插件不使用cordova.plugin窗口。试着调用插件函数,并检查它们是否工作。

+0

感谢您的帮助!我怎样才能直接调用插件?我试图直接在索引中包含“zeroconf.js”脚本,但没有奏效。 – HyperZ

+0

@HyperZ你是否试图直接检查全局ZeroConf对象? – beaver

+0

@beaver我在几分钟前意识到这一点,我现在正在测试它:)我会保持联系。 – HyperZ