当我使用 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
我使用以下命令安装了 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);
});
})
}
}
此外,我还看到了其他 问题,但并没有解决我的问题。
您在浏览器中测试时访问的是本地插件。为了让插件正常工作,您应该使用真实设备进行测试。
为了使您的代码在浏览器中可测试(或实际上在浏览器中测试时不会出错),您应该使用 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 支持 "浏览器 "平台。使用该平台,大多数常见插件都能正常工作。需要注意的是,有些插件无法使用,例如条形码扫描器插件。因为它会向您发出警报,要求您提供必须 "扫描 "的值。这就失去了条码扫描器的全部用途。
只有在真实设备上运行应用程序时,才能访问 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 插件的部分。要真正测试应用程序,您需要在设备或模拟器上运行它。