Когда я запускаю приложение ionic с ionic serve -l
, получаю эту ошибку:
Ошибка времени выполнения.
Uncaught (in promise): cordova_not_available
Стек
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)
другие подробности
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
Я устанавливаю плагин HotSpot с помощью следующей команды:
ionic plugin add cordova-plugin-hotspot --save
cordova plugin add cordova-plugin-hotspot --save
Использование 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);
});
})
}
}
Также я вижу другие вопросы, но они не решают мою проблему.
Вы обращаетесь к родным плагинам при тестировании в браузере. Для того чтобы плагины работали, для тестирования следует использовать реальное устройство.
Для того, чтобы ваш код был тестируемым в браузере (или вообще не ломался при тестировании в браузере), вы должны иметь if-статью, проверяющую, доступна ли Cordova:
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';
}
EDIT:
Как правильно упоминает Рики Леви здесь ниже, Ionic поддерживает платформу browser
. Используя эту платформу, большинство распространенных плагинов могут работать. Обратите внимание, что некоторые плагины не будут работать, например, плагин Barcode-scanner. Так как он будет выдавать предупреждение, запрашивая значение, которое необходимо сканировать
. Что приведет к потере всего смысла использования сканера штрих-кодов.
Может что-то изменилось с тех пор, но ионные теперь поддерживает и"браузер" в качестве платформы ( против просто просматривать ) - что делает Кордова плагины в браузере.
Чтобы использовать его, вы добавить платформы платформы ионной Кордова добавить браузер
И тогда вы запустите ионные ионные Кордова запустить браузер
против служить
( ионные запустить браузер
- как ионные Кордова запустить ионные Андроид " или " Кордова управлением iOS
)
Cordova доступна только тогда, когда вы запускаете свое приложение на реальном устройстве. Когда вы тестируете свое приложение в браузере, оно не может получить доступ к родным плагинам.
Вы можете проверить, находитесь ли вы на реальном устройстве или в таком браузере:
if (this.platform.is('cordova')) {
// You are on a device, cordova plugins are accessible
} else {
// Cordova not accessible, add mock data if necessary
}
Это поможет вам протестировать только те части вашего приложения, которые не зависят от плагинов cordova. Чтобы действительно протестировать ваше приложение, вам нужно запустить его на устройстве или в эмуляторе.
Для запуска приложения в браузере
1.Проверьте платформу
# 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"
}
}
Использовать эти проверки в методах, где вы реализуете зависимости Кордова.
Используя Кордова тренажер помогает предотвратить ошибка: Неперехваченные (обещанию): cordova_not_available
.
Кордова симулятор
НПМ установки -G в Кордова-имитация
Кордова симулятор
:Из командной строки в любом месте в рамках проекта Кордова
введите следующее:
имитировать [платформа] [--цель=браузер]
платформенный Cordova
, которая была добавлена в проект. По умолчанию браузер.по умолчанию
, хром
, хром
, край
, в Firefox
, е
, опера
, сафари
.Пример:
simulate android --target=chrome
Эта команда открывает 2 вкладки в браузере Chrome на следующие адреса и порты:
Вы можете использовать вкладку симулятор для изменения и имитации условий устройства, такие как GPS-координаты, тип интернет-соединения, устройство ориентации и т. д. и вы можете использовать другие вкладки, чтобы проверить ваше приложение.
эта ошибка генерируется при попытке получить доступ к мобильным функциям, например, номера мобильного устройства, если вы хотите получить доступ к черни, GPS, вам нужно Кордова это's в цепи между JavaScript-кодом и целевой платформы
лучшее, что можно сделать, это проверить условиях вы работаете, если его Кордова, так что вы Дон'т упасть в Кордова не фонд ошибка
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
}