Неподготовлено (в обещании): cordova_not_available в Ionic 2

Когда я запускаю ионное приложение с ionic serve -l, получаю эту ошибку:

Ошибка выполнения

Uncaught (в обещании): 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);

 });
})
   }
  }

Кроме того, я вижу другие вопросы, но не решаю свою проблему.

Ответы

Ответ 1

Вы получаете доступ к собственным плагинам во время тестирования в браузере. Чтобы плагины работали, вы должны использовать реальное устройство для тестирования.

Чтобы сделать ваш код тестируемым в браузере (или вообще не ломаться при тестировании в браузере), вы должны проверить оператор 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';
  }

РЕДАКТИРОВАТЬ:

Как правильно здесь заметил Рики Леви, Ionic поддерживает платформу browser. Используя эту платформу, большинство распространенных плагинов могут работать. Обратите внимание, что некоторые плагины не будут, например плагин сканер штрих-кода. Так же он выдаст вам предупреждение, запрашивая значение, которое необходимо scanned. Который потеряет весь сценарий использования сканера штрих-кода.

Ответ 2

Возможно, с тех пор что-то изменилось, но Ionic теперь поддерживает "браузер" как платформу (просто просматривает), что делает плагины Cordova доступными в браузере.

Чтобы использовать его, вы добавляете платформу ionic cordova platform add browser

И затем вы запускаете ionic cordova run browser ionic serve (ionic run browser - точно так же, как ionic cordova run android или ionic cordova run ios)

Ответ 3

Кордова доступна только при запуске приложения на реальном устройстве. Когда вы тестируете свое приложение в браузере, он не может получить доступ к этим родным плагинам.

Вы можете проверить, находитесь ли вы на реальном устройстве или в браузере:

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

Это поможет вам протестировать части вашего приложения, которые не полагаются на плагины cordova. Чтобы действительно протестировать ваше приложение, вам нужно запустить его на устройстве или в эмуляторе.

Ответ 4

Запуск приложения в браузере

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

Используйте эти проверки в своих методах, где вы реализуете зависимости Кордовы.

Ответ 5

Загрузите приложение Ionic View, а затем запустите команду ionic upload.

После этого вы сможете просмотреть приложение на своем телефоне, а собственные функции будут работать.

Ответ 6

эта ошибка возникает при попытке доступа к мобильным функциям на немобильном устройстве, например, если вы хотите получить доступ к мобильному GPS, вам нужна кордова, это цепочка ссылок между кодом 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
  }

Ответ 7

Использование имитатора cordova помогает предотвратить Error: Uncaught (in promise): cordova_not_available.

- установить cordova simulator

npm install -g cordova-simulate

- Запустите cordova simulator:

  • В командной строке в любом месте проекта Cordova введите следующее:

    simulate [platform] [--target=browser]

  • platform - это любая Cordova platform, добавленная в ваш проект. По умолчанию браузер.

  • browser - это имя браузера, в котором запускается ваше приложение. Может быть любым из следующих: default, chrome, chromium, edge, firefox, ie opera, safari.

Пример:

simulate android --target=chrome

Приведенная выше команда откроет 2 вкладки в chrome browser со следующими URL и портами:

  1. HTTP://локальный: 8000/Симулятор/index.html
  2. HTTP://локальный: 8000/index.html

Вы можете использовать вкладку симулятора для изменения и моделирования условий устройства, таких как координаты GPS, тип интернет-соединения, ориентация устройства и т.д., А также можете использовать другую вкладку для тестирования приложения.