web-dev-qa-db-fra.com

Non capturé (en promesse): cordova_not_available in Ionic 2

Lorsque j'exécute mon Ionic avec ionic serve -l commande, obtenez le message d'erreur suivant:

Erreur d'exécution

Non capturé (en promesse): cordova_not_available

Pile

Error: Uncaught (in promise): cordova_not_available
at v (http://localhost:8100/build/polyfills.js:3:4864)
at s (http://localhost:8100/build/polyfills.js:3:4289)
at s (http://localhost:8100/build/polyfills.js:3:4112)
at http://localhost:8100/build/polyfills.js:3:4652
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:10284)
at Object.onInvokeTask (http://localhost:8100/build/main.js:38692:37)
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:10220)
at e.runTask (http://localhost:8100/build/polyfills.js:3:7637)
at i (http://localhost:8100/build/polyfills.js:3:3707)
at HTMLDocument.invoke (http://localhost:8100/build/polyfills.js:3:11437)

autres détails

Ionic Framework: 2.2.0
Ionic Native: 2.8.1
Ionic App Scripts: 1.1.4
Angular Core: 2.4.8
Angular Compiler CLI: 2.4.8
Node: 6.9.2
OS Platform: Windows 10
Navigator Platform: Win32
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

J'installe HotSpot plugin, avec la commande suivante:

ionic plugin add cordova-plugin-hotspot --save

cordova plugin add cordova-plugin-hotspot --save

Utilisation app.component.ts

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar, Splashscreen,Hotspot,Network } from 'ionic-native';
import { TabsPage } from '../pages/tabs/tabs';


@Component({
 templateUrl: 'app.html'
})

export class MyApp {
rootPage = TabsPage;

 constructor(platform: Platform) {

  platform.ready().then(() => {
     StatusBar.styleDefault();
     Splashscreen.hide();
     Hotspot.scanWifi().then((networks: Array<Network>) => {
     console.log(networks);

 });
})
   }
  }

De plus, j'ai vu des questions similaires mais ils n'ont pas résolu le problème.

43
Soheil Alizadeh

Vous accédez à des plugins natifs pendant les tests dans le navigateur. Afin de faire fonctionner les plugins, vous devez utiliser un véritable appareil pour tester.

Afin de rendre votre code testable dans le navigateur (ou en fait ne pas casser lors du test dans le navigateur), vous devriez avoir une instruction if pour vérifier si Cordova est disponible:

  if (this.platform.is('cordova')) {
    // You're on a device, call the native plugins. Example: 
    //
    // var url: string = '';
    // 
    // Camera.getPicture().then((fileUri) => url = fileUri);
  } else {
    // You're testing in browser, do nothing or mock the plugins' behaviour.
    //
    // var url: string = 'assets/mock-images/image.jpg';
  }

ÉDITER:

Comme Ricky Levi le mentionne correctement ci-dessous, Ionic prend en charge la plate-forme browser. En utilisant cette plate-forme, les plugins les plus courants peuvent fonctionner. Notez que certains plugins ne le feraient pas, par exemple le Plugin de scanner de codes à barres. Comme il vous invitera avec une alerte, demandant la valeur qui doit être scanned. Ce qui perdra tout le cas d'utilisation d'un scanner de codes à barres.

69
JoeriShoeby

Peut-être que quelque chose a changé depuis, mais Ionic prend désormais en charge le "navigateur" en tant que plate-forme (vs simplement parcourir) - ce qui rend les plugins Cordova disponibles dans le navigateur.

Pour l'utiliser, vous ajoutez la plate-forme ionic cordova platform add browser

Et puis vous exécutez ionic cordova run browser contre ionic serve (ionic run browser - juste comme ionic cordova run Android ou ionic cordova run ios)

59
Ricky Levi

Cordova n'est accessible que lorsque vous exécutez votre application sur un appareil réel. Lorsque vous testez votre application dans le navigateur, elle ne peut pas accéder à ces plugins natifs.

Vous pouvez vérifier si vous êtes sur un appareil réel ou un navigateur comme celui-ci:

if (this.platform.is('cordova')) {
  // You are on a device, cordova plugins are accessible
} else {
  // Cordova not accessible, add mock data if necessary
}

Cela vous aidera uniquement à tester les parties de votre application qui ne dépendent pas des plugins cordova. Pour vraiment tester votre application, vous devez l'exécuter sur un appareil ou dans l'émulateur.

11
Andreas Gassmann

Pour exécuter l'application dans le navigateur

1.Vérifiez la plateforme

# import {Platform} from 'ionic-angular';
 # constructor(public platform:Platform) {
     if (this.platform.is('core')) {
      this.myPlatform = "Browser";
      console.log('I am on a web browser')
    } else {
      this.mobileDevice = "True"
    }
   }

Utilisez ces vérifications dans vos méthodes où vous implémentez les dépendances Cordova.

3
Siddharth

Téléchargez l'application Ionic View, puis exécutez la commande ionic upload.

Vous pourrez ensuite prévisualiser l'application sur votre téléphone et les fonctionnalités natives fonctionneront.

2
Chris

L'utilisation du simulateur cordova permet d'éviter la Error: Uncaught (in promise): cordova_not_available.

- Installer cordova simulator

npm install -g cordova-simulate

- Courir cordova simulator:

  • À partir de la ligne de commande, n'importe où dans un projet Cordova, entrez ce qui suit:

    simulate [platform] [--target=browser]

  • platform est n'importe quel Cordova platform qui a été ajouté à votre projet. Par défaut, le navigateur.

  • browser est le nom du navigateur dans lequel lancer votre application. Peut être l'un des éléments suivants: default, chrome, chromium, Edge, firefox, ie, opera, safari.

Exemple:

simulate Android --target=chrome

La commande ci-dessus ouvrira 2 onglets dans chrome browser avec les URL et ports suivants:

  1. http: // localhost: 8000/simulator/index.html
  2. http: // localhost: 8000/index.html

Vous pouvez utiliser l'onglet du simulateur pour modifier et simuler les conditions de l'appareil telles que les coordonnées GPS, le type de connexion Internet, l'orientation de l'appareil, etc. et vous pouvez utiliser un autre onglet pour tester votre application.

2
Hamid Araghi

cette erreur est générée lorsque vous essayez d'accéder aux fonctionnalités mobiles sur un appareil non mobile, par exemple si vous voulez accéder au GPS mobile, vous avez besoin de cordova c'est la chaîne de liens entre le code javascript et la plateforme ciblée

la meilleure chose à faire est de tester l'environnement sur lequel vous travaillez si sa cordova afin de ne pas tomber dans la cordova ne finance pas l'erreur

    if (this.platform.is('cordova')) {
    // You're on a mobile device "IOS Android WINDOWS" 
    // now you can call your native plugins
  } else {
    // You're testing in a browser so you may want to use another method or run your code on a emulator
  }
1
Omar Ali