web-dev-qa-db-ja.com

キャッチされていない(約束されている):cordova_not_available in Ionic 2

私が実行しているときIonic app with ionic serve -lコマンド、次のエラーメッセージを取得:

実行時エラー

捕捉されなかった(約束された):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);

 });
})
   }
  }

また、同様の questions を見ましたが、問題は解決しませんでした。

43
Soheil Alizadeh

ブラウザでのテスト中にネイティブプラグインにアクセスしています。プラグインを機能させるには、実際のデバイスを使用してテストする必要があります。

コードをブラウザーでテスト可能にするには(または実際にブラウザーでテストしても中断しないようにするため)、Cordovaが使用可能かどうかをifステートメントでチェックする必要があります。

  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';
  }

編集:

Ricky Leviが以下で正しく言及しているように、Ionicはbrowserプラットフォームをサポートしています。このプラットフォームを使用すると、最も一般的なプラグインが機能します。一部のプラグインは機能しないことに注意してください。たとえば、バーコードスキャナープラグイン。アラートが表示されるので、scannedの値を要求します。これにより、バーコードスキャナーのユースケース全体が失われます。

69
JoeriShoeby

おそらく何かが変わったかもしれませんが、Ionicがプラットフォームとして「ブラウザ」をサポートするようになりました(単に参照するだけです)-これにより、Cordovaプラグインがブラウザで利用できるようになります。

それを使用するには、プラットフォームを追加しますionic cordova platform add browser

そして、あなたはionic cordova run browserionic serveionic run browser - と同じように ionic cordova run Androidまたはionic cordova run ios

59
Ricky Levi

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プラグインに依存しないアプリの部分をテストする場合にのみ役立ちます。アプリを実際にテストするには、デバイスまたはエミュレーターで実行する必要があります。

11

ブラウザでアプリを実行するため

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依存関係を実装するメソッドでこれらのチェックを使用します。

3
Siddharth

Ionicアプリを表示し、コマンドionic uploadを実行します。

その後、スマートフォンでアプリをプレビューできるようになり、ネイティブ機能が動作します。

2
Chris

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は、アプリを起動するブラウザーの名前です。defaultchromechromiumEdgefirefoxieoperasafari

例:

simulate Android --target=chrome

上記のコマンドは、次のURLとポートでchrome browserに2つのタブを開きます。

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

シミュレータータブを使用して、GPS座標、インターネット接続タイプ、デバイスの向きなどのデバイス条件を変更およびシミュレーションできます。また、他のタブを使用してアプリをテストできます。

2
Hamid Araghi

このエラーは、モバイル以外のデバイスでモバイル機能にアクセスしようとしたときに生成されます。たとえば、モバイルGPSにアクセスしたい場合は、JavaScriptコードとターゲットプラットフォーム間のリンクチェーンであるCordovaが必要です。

コルドバに陥らないように、コルドバが実行されている環境をテストして、エラーに資金を提供しないことが最善の方法です。

    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