未捕获(承诺):在离子 2 中cordova_not_available



当我使用ionic serve -l命令运行我的 Ionic 应用程序时,收到以下错误消息:

运行时错误

未捕获(承诺(: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

我使用以下命令安装热点插件:

ionic plugin add cordova-plugin-hotspot --save
cordova plugin add cordova-plugin-hotspot --save

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

编辑:

正如Ricky Levi在下面正确提到的,Ionic支持browser平台。使用此平台,大多数常见的插件都可以工作。请注意,有些插件不会,例如条形码扫描仪插件。因为它会提示您警报,询问必须scanned的值。这将失去条形码扫描仪的整个用例。

也许从那以后有些事情发生了变化,但 Ionic 现在支持"浏览器"作为一个平台(而不是简单的浏览( - 这使得 Cordova 插件在浏览器中可用。

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

然后你运行ionic cordova run browser vs ionic serve(ionic run browser - 就像ionic cordova run androidionic cordova run 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 依赖项的方法中使用这些检查。

使用科尔多瓦模拟器有助于防止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 坐标、互联网连接类型、设备方向等,也可以使用其他选项卡来测试您的应用程序。

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

然后,您将能够在手机上预览该应用程序,并且本机功能将起作用。

当您

尝试在非移动设备上访问移动功能时会生成此错误,例如,如果您想访问移动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
  }

离子科尔多瓦平台添加浏览器

离子科尔多瓦运行浏览器

相关内容

  • 没有找到相关文章