6

Potrzebuję utworzyć i zainstalować niestandardową wtyczkę cordova w aplikacji na telefon z systemem Windows 8 opartej na Cordova. Obecnie obsługa przycisku kliknięcia w aplikacji nie może zobaczyć obiektu js, który wywołuje cordova.execOgólna niestandardowa wtyczka dla systemu Windows 8 Telefon nie może znaleźć obiektu js wpisu

Ten obiekt z funkcją wywołania cordova.exe nazywa się dlScanner Posiada funkcję scanBarcode, która wywołuje cordova.exec

handler click to:

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

komunikat o błędzie jest taka:

 TypeError: Cannot read property 'scanBarcode' of undefined 

Kontekst: Użyłem generatora pluginów Microsoftu, PluginGenerator, znalezionego here. Następnie użyłem Projektanta widoku, w pliku config.xml aplikacji, w Visual Studio Community 2015, aby zainstalować tę wtyczkę w ogólnej aplikacji telefonicznej Windows 8, którą VS utworzył dla mnie wcześniej.

To proces plugin zainstalować umieścić to w aplikacji pliku config.xml

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

W katalogu dlScanner (mowa powyżej) istnieją src www i katalogów i plików plugin.xml

W tym plugin.xml plik jest taka:

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

WW w/pliku dlScanner.js zawiera to:

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

Co muszę zrobić, aby umożliwić obsługi kliknij aby zobaczyć obiekt dlScanner?

Dzięki

+0

Zauważam, że w innych projektach Win8 cordova znajduje się plik www/cordova_plugins.js, który uruchamia to: 'cordova.define ('cordova/plugin_list', function (require, exports, module) {module.exports = ['moja BlankApp, której VS nie ma. Tak więc myślę, że albo potrzebuję tego pliku, albo muszę uruchomić mój plik www/dlScanner.js. Oba robią idee 'module.exports'? – pdschuller

Odpowiedz

2

Spróbuj zadzwonić do wtyczki po Cordova został zainicjowany i zdarzenie deviceready został wyemitowany. Zobacz więcej o tym wydarzeniu tutaj: http://docs.phonegap.com/en/3.5.0/cordova_events_events.md.html#deviceready.

+0

Nie wiem, co masz na myśli przez "zadzwoń do wtyczki" Nie widzę ani nie wiem metody inicjalizacji wtyczki, tylko metoda obsługi kliknięcia. Proszę wytłumacz. – pdschuller

+0

Wtyczki Cordova, które eksponują natywną funkcjonalność w środowisku JavaScript, nie są gotowe od wczytania dokumentu. Dlatego przy próbie dostępu do metod ujawnionych przez wtyczkę pojawia się niezdefiniowany błąd. Spróbuj skopiować pełny przykład z dokumentacji deviceready. Powinieneś dodać swój kod po linii "// Teraz bezpiecznie korzystać z interfejsów API urządzeń". –

+0

Nigdy nie dostałem się do funkcji urządzenia i ta wskazówka nie była rozwiązaniem. Wydarzenie deviceReady pomogło mi jednak w innym wydaniu. – pdschuller

1

Było kilka problemów:

The View Designer, auto-plugin-instalator w VS nie dodaje odniesienie do pliku dlScanner.js w moim pliku index.html. Więc musiałem przenieść ten plik do katalogu scripts i dodać w index.html

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

To już cordova.exec bieg i moja click obsługi zaczęła bić kod dlScanner. Potem zaczął się ten błąd

module is undefined 

To powiedział mi (myślę), że Cordova nie był gotowy, kiedy linia module.exports ran, więc potem kładę rzeczy module.exports w onDeviceReady

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

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

dzięki @Vlad