未捕获(承诺):在Ionic 2中的cordova_not_available

时间:2017-03-16 17:28:39

标签: angular cordova typescript ionic-framework ionic2

当我使用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,但没有解决我的问题。

8 个答案:

答案 0 :(得分:64)

您在浏览器中测试时正在访问本机插件。为了使插件工作,您应该使用真实设备进行测试。

为了使您的代码在浏览器中可测试(或者在浏览器中测试时实际上没有中断),您应该使用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';
  }

编辑:

正如Ricky Levi在下面正确提到的那样,Ionic支持browser平台。使用此平台,大多数常见插件都能够工作。请注意,某些插件不会,例如Barcode-scanner插件。因为它会提示您提醒,要求提供必须为scanned的值。这将失去条形码扫描仪的整个用例。

答案 1 :(得分:55)

从那以后可能会发生一些变化,但Ionic现在支持&#34;浏览器&#34;作为一个平台(简称浏览) - 这使得Cordova插件在浏览器中可用。

要使用它,请添加平台ionic cordova platform add browser

然后你运行ionic cordova run browser vs ionic serveionic run browser - 就像ionic cordova run androidionic cordova run ios

答案 2 :(得分:10)

只有在真实设备上运行应用时,才能访问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插件的应用部分。要真正测试您的应用,您需要在设备或模拟器中运行它。

答案 3 :(得分:3)

在浏览器中运行应用程序

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依赖项的方法中使用这些检查。

答案 4 :(得分:2)

下载Ionic View应用程序,然后运行命令ionic upload。

然后,您就可以在手机上预览该应用,原生功能也可以使用。

答案 5 :(得分:2)

当您尝试在非移动设备上访问移动功能时会产生此错误,例如,如果您想要访问移动GPS,则需要使用cordova 它是javascript代码和目标平台之间的链接

最好的办法是测试你运行的环境,如果它的cordova让你不属于cordova而不是资金错误

(map #(re-name (as-file %1) (as-file %2)) flist new-flist)))

答案 6 :(得分:1)

使用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

以上命令将在chrome browser中打开2个带有以下URL和端口的标签:

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

您可以使用“模拟器”标签来更改和模拟设备条件,例如GPS坐标,互联网连接类型,设备方向等,还可以使用其他标签来测试您的应用。

答案 7 :(得分:1)

ionic cordova平台添加浏览器

ionic cordova运行浏览器