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.
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.
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
)
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.
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.
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.
L'utilisation du simulateur cordova permet d'éviter la Error: Uncaught (in promise): cordova_not_available
.
cordova simulator
npm install -g cordova-simulate
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:
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.
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
}