2013-07-26 15 views
5

Czy istnieje sposób na sprawdzenie, czy konkretna wtyczka Cordova jest dostępna do wywołania w Cordova 2.5.0? Cordova.exec pobiera successFunction i failFunction, ale failFunction jest wywoływana tylko wtedy, gdy wykonywany jest kod natywny. Czy istnieje sposób na otrzymanie błędu lub oddzwaniania, jeśli funkcja odbierająca nie istnieje? Szukam rozwiązania, które pracuje z adresem URL remove załadowanego do WebViewWykryj, czy istnieje wtyczka Cordova.

http://docs.phonegap.com/en/2.5.0/guide_plugin-development_ios_index.md.html

+0

Wiem, że próbujesz wykryć, czy istnieje, ale nie możesz użyć próby złapania i tak rt osiągnięcia tego samego? Wywołaj wtyczkę w try, jeśli wtyczka nie istnieje, wówczas kod w haczyku zostanie wykonany. –

+0

w tym celu należy opracować inną wtyczkę, która sprawdza istnienie innych wtyczek, wystarczy wywołać smth jak PluginChecker i sprawdzić, czy żądana wtyczka istnieje czy nie – Ocelot

+0

, w której os potrzebujesz tego? ios czy android? – Ocelot

Odpowiedz

2

można zrobić setTimeout do 100 ms przed próbuje uzyskać dostęp do wtyczki, a na sukces/porażka wtyczki anulować timeout. jeśli upłynął limit czasu - wtyczka nie jest zainstalowana.

0

To nie jest całkowicie bezpieczne, ale należy być w stanie odczytać config.xml i szukać konfiguracji wtyczki, aby zobaczyć jeśli wtyczka jest zarejestrowany:

var myPluginName = "MyPluginName"; 
var myPluginExists = false; 
$.ajax(
    { 
     url: "../config.xml", 
     success: 
      function(configXML) 
      { 
       myPluginExists = (configXML.indexOf(myPluginName) > 0); 
      }, 
     dataType: "text" 
}); 
+0

Niestety, nie sądzę, że podałem to wcześniej, ale szukam czegoś, co zadziała, gdy JS będzie działał na zdalnym serwerze i nie ma dostępu do plików w projekcie. – sguha

+0

Nie, podałeś to. Po prostu nie doceniłem tego, do czego zmierzasz. Zakładałem, że mówisz o JS na urządzeniu, ponieważ jeśli JS jest na serwerze, i tak nie będziesz mieć dostępu do cordova.exec. – Chuck

8

rozwiązania dość prostsze (i czystszego), można również skorzystać z tej metody:

var plugins = cordova.require("cordova/plugin_list").metadata; 

dostaniesz przedmiot patrząc tak:

{ 
    'cordova-plugin-network-information': "1.0.0", 
    'cordova-plugin-whitelist': "1.0.0" 
} 

W każdej zmiennej normalnej, możesz sprawdzić, czy jest on zdefiniowany:

if (typeof plugins['cordova-plugin-whitelist'] === "undefined") 
{ 
    // This plugin is missing 
} 
Powiązane problemy