6
nicht finden

Ich muss ein benutzerdefiniertes Cordova-Plugin in einer cordova-basierten Windows 8-Telefon-App erstellen und installieren. Derzeit kann die Schaltfläche Click-Handler in der App nicht das js Objekt sehen, die den Anruf tätigtGenerisches benutzerdefiniertes Plugin für Windows 8 Phone kann Eintrag js Objekt

dieses Objekt mit der Funktion cordova.exec der cordova.exe nennt wird dlScanner genannt Es hat eine Funktion, scanBarcode die Anrufe cordova.exec

Der Click-Handler, ist dies:

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

Die Fehlermeldung ist dies:

 TypeError: Cannot read property 'scanBarcode' of undefined 

Kontext: Ich habe den Plugin Generator von Microsoft, PluginGenerator, verwendet, der here gefunden hat. Dann habe ich den View Designer in der Datei config.xml der App in Visual Studio Community 2015 verwendet, um das Plugin in die generische cordova Windows Phone App zu installieren, die VS für mich zuvor erstellt hatte.

Das Prozess-Plugin installieren setzen diese Datei in der config.xml App

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

Im dlScanner Verzeichnis (oben genannten) gibt es src und www-Verzeichnisse und eine plugin.xml Datei

Darin plugin.xml Datei ist dies:

 <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" /> 

Die ww w/dlScanner.js Datei enthält diese:

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

Was muß ich tun, um den Click-Handler zu ermöglichen, das dlScanner Objekt zu sehen?

Dank

+0

Ich bemerke, dass in anderen Win8 cordova Projekten gibt es eine www/cordova_plugins.js Datei, die dies ausführt: 'cordova.define ('cordova/plugin_list', Funktion (erfordern, exportiert, Modul) {Modul.exports = ['meine BlankApp, die VS erstellt hat, hat das nicht. Also ich denke, ich brauche entweder diese Datei oder ich muss meine www/dlScanner.js Datei laufen lassen. Beide machen 'modul.exports' Ideen? – pdschuller

Antwort

2

Versuchen Sie das Plugin rufen nach Cordova und die deviceready Ereignis initialisiert hat, hat emittiert worden. Sehen Sie mehr über dieses Ereignis hier: http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready.

+0

Ich weiß nicht, was Sie unter "Aufruf des Plugins" verstehen. Ich sehe oder kenne keine Initialisierungsmethode für das Plugin, nur eine Click-Handler-Methode. Bitte erkläre. – pdschuller

+0

Cordova-Plugins, die die native Funktionalität der JavaScript-Umgebung offen legen, sind nicht bereit, sobald das Dokument geladen wird. Wenn Sie versuchen, auf die vom Plugin zur Verfügung gestellten Methoden zuzugreifen, erhalten Sie diesen undefinierten Fehler. Versuchen Sie, das vollständige Beispiel aus der Gerätedokumentation zu replizieren. Sie sollten Ihren Code nach der Zeile "// Jetzt sichere Geräte-APIs verwenden" hinzufügen. –

+0

Ich kam nie zu Gerätefunktionalität und dieser Tipp war nicht die Lösung. Das DeviceReady-Ereignis hat mir jedoch bei einem anderen Problem geholfen. – pdschuller

1

Es gab mehrere Probleme:

Der View Designer, Auto-Plugin-Installer in VS hinzugefügt nie einen Verweis auf die dlScanner.js Datei in meiner Datei index.html. Also musste ich diese Datei in das Verzeichnis scripts bewegen, und fügen Sie diese in index.html

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

Das cordova.exec laufen und meine Click-Handler gemacht begann die dlScanner Code zu schlagen. Dann begann ich diesen Fehler

module is undefined 

, das mir sagte (glaube ich), dass cordova nicht bereit war, als die module.exports Linie lief, so ist, dann habe ich die module.exports Sache in onDeviceReady

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

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

danke @Vlad