6

Ho bisogno di creare e installare un plug-in personalizzato Cordova in un'app di Windows 8 per telefoni basata su cordova. Al momento, il gestore di clic del pulsante nell'app non può vedere l'oggetto js che effettua la chiamata a cordova.execplug-in generico personalizzato per Windows 8 Il telefono non trova la voce js oggetto

Tale oggetto, con la funzione che chiama cordova.exe si chiama dlScanner Ha una funzione, scanBarcode che chiama cordova.exec

Il gestore click è questo:

 $(document).ready(function() { 
     $('#cmdOne').click(function() { 
      dlScanner.scanBarcode(
       function (results) { 
        alert(results); 
      }), function (err) { 
        alert(err); 
      }, 'lowercaseworld' 
     }); 
    }); 

Il messaggio di errore è questo:

 TypeError: Cannot read property 'scanBarcode' of undefined 

Contesto: ho usato il generatore di plugin Microsoft, PluginGenerator, trovato here. Quindi ho utilizzato View Designer, sul file config.xml dell'applicazione, in Visual Studio Community 2015, per installare quel plug-in nell'app di cordova per Windows 8 che VS aveva creato per me in precedenza.

quel plugin processo di installazione mettere questo nel file config.xml dell'app

<vs:plugin name="com.contoso.dlScanner" version="0.1.0" src="C:\Users\TestAndDemo\dlScanner" /> 

Nella directory dlScanner (di cui sopra) ci sono src e www directory e un file plugin.xml

In questo file di plugin.xml è questo:

 <js-module src="www/dlScanner.js" name="dlScanner"> 
     <clobbers target="dlScanner" /> 
    </js-module> 

    <!-- wp8 --> 
    <platform name="wp8"> 
     <config-file target="config.xml" parent="/*"> 
      <feature name="dlScanner"> 
       <param name="wp-package" value="dlScanner"/> 
      </feature> 
     </config-file> 

     <source-file src="src/wp/dlScanner.cs" /> 

Il ww w/file di dlScanner.js contiene questo:

  var dlScanner = { 
      scanBarcode: function (successCallback, errorCallback, strInput) { 
       cordova.exec(successCallback, errorCallback, "dlScanner", "scanBarcode", [strInput]); 
      } 
     } 
module.exports = dlScanner; 

Che cosa devo fare per permettere al gestore clicca per vedere l'oggetto dlScanner?

Grazie

+0

Ho notato che in altri progetti di cordova Win8 esiste un file www/cordova_plugins.js che esegue questo: 'cordova.define ('cordova/plugin_list', function (require, exports, module) {module.exports = ['my BlankApp che VS ha creato non ha questo. Quindi penso di aver bisogno di quel file o di eseguire il mio file www/dlScanner.js. Entrambe le idee di 'module.exports'? – pdschuller

risposta

2

tenta di chiamare il plugin dopo Cordova ha inizializzato e l'evento deviceready è stata emessa. Vedi di più su questo evento qui: http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready.

+0

Non so cosa intendi con "chiama il plugin" Non vedo o conosco un metodo di inizializzazione per il plug-in, solo un metodo di gestione dei clic. Spiega per favore. – pdschuller

+0

I plug-in Cordova che espongono le funzionalità native all'ambiente JavaScript non sono pronti fin dal momento del caricamento del documento. Ecco perché quando provi ad accedere ai metodi esposti dal plugin ottieni quell'errore indefinito. Prova a replicare l'esempio completo dalla documentazione di deviceready. Dovresti aggiungere il tuo codice dopo la riga "// Now safe to use device APIs". –

+0

Non ho mai avuto accesso alle funzionalità del dispositivo e questo suggerimento non era la soluzione. L'evento deviceReady mi ha comunque aiutato a risolvere un altro problema. – pdschuller

1

ci sono stati diversi problemi:

La Progettazione viste, auto-plugin-installer in VS mai aggiunto un riferimento al file dlScanner.js nel mio file index.html. Così ho dovuto spostare il file nella directory degli script e aggiungere questo in index.html

<script src="scripts/index.js"></script> 

che ha fatto correre cordova.exec e mio gestore click iniziato a colpire il codice dlScanner. Poi ho iniziato a ricevere questo errore

module is undefined 

che mi ha detto (credo) che Cordova non era pronta quando la linea module.exports corse, così poi ho messo la cosa in module.exports onDeviceReady

function onLoad() { 
document.addEventListener("deviceready", onDeviceReady, false); 
    } 

function onDeviceReady() { 
     module.exports = dlScanner; 
    } 

grazie @Vlad