当我用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但不解决我的问题。
您在浏览器中进行测试时访问本机插件。为了使插件工作,您应该使用真实的设备进行测试。
为了使您的代码在浏览器中可测试(或者在浏览器中测试时实际上不会中断),您应该使用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
的值。这将失去条形码扫描仪的整个用例。
也许从那以后发生了一些变化,但Ionic现在支持“浏览器”作为平台(简称浏览) - 这使得Cordova插件在浏览器中可用。
要使用它,您需要添加平台ionic cordova platform add browser
然后你运行ionic cordova run browser
vs ionic serve
(ionic run browser
- 就像ionic cordova run android
或ionic 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依赖项的方法中使用这些检查。
下载Ionic View应用程序,然后运行命令ionic upload。
然后,您就可以在手机上预览应用程序,原生功能也可以使用。
当您尝试在非移动设备上访问移动功能时会生成此错误,例如,如果您想要访问移动GPS,则需要使用cordova,这是javascript代码与目标平台之间的链接链
最好的办法是测试你运行的环境,如果它的cordova,你不要陷入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
}
使用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
上面的命令将在chrome browser
中打开2个选项卡,其中包含以下URL和端口:
您可以使用模拟器选项卡更改和模拟设备条件,例如GPS坐标,互联网连接类型,设备方向等,您可以使用其他选项卡来测试您的应用。