2016-02-15 366 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