【发布时间】:2019-01-11 15:06:52
【问题描述】:
我正在构建一个将使用 Cordova 8.1.2 包装的全平台 Angular 6 APP 不幸的是我无法触发 deviceready 事件。
我有两个单独的项目,一个用于 Angular,一个用于 Cordova,我能够构建 Angular 项目并使用以下命令创建一个 android apk:
ng build --prod --base-href . --output-path ../Cordova/CordovaMobileApp/www/ & cd ../Cordova/CordovaMobileApp & cordova run android & cd ../../NxAngularMVI
但是现在我需要使用 Cordova 插件,为此我需要检测 deviceready 事件。
在我的 index.html 头中我已经包含:
<script type=”text/javascript” src=”cordova.js”></script>
在我的 main.ts 文件中,我试图等待事件发生以引导我的应用程序。
const onDeviceReady = () => {
console.log('Bootstrap ON!');
platformBrowserDynamic().bootstrapModule(AppModule).catch(err =>
console.log(err));
};
document.addEventListener('deviceready', onDeviceReady, false);
应用永远不会初始化,因为 deviceready 事件永远不会被触发。我已经尝试了几种我在这种引导方法的堆栈溢出中发现的变体,但无济于事。我已经尝试重新安装从框架到平台再到插件的每个 cordova 部分,但没有任何帮助。我在 Galaxy S9 和摩托罗拉 G5 上测试过。
由于 Cordova API 提供的这个功能对于我的项目来说是必须的,所以我需要你们的帮助。谢谢!
【问题讨论】:
-
他找到(包括)cordova.js 了吗?尝试在某处输出它的变量
-
@Joniras 嗨,伙计。我怎么能做到这一点。我看到在cordova.js 文件中创建了一个cordova 变量,所以我尝试在main.ts 文件
declare let cordova: any;之上声明它,然后:const onDeviceReady = () => { console.log('Bootstrap ON!'); console.log(cordova); platformBrowserDynamic().bootstrapModule(AppModule).catch(err => console.log(err)); };这就是我得到的:Uncaught ReferenceError: cordova is not defined跨度> -
双重检查 js 文件的路径以及它是否包含在您的 main.js 中(在 dist 文件夹中)。我试图检查定义了哪些变量,我发现应该定义 window.cordova。因此,只需通过
console.log("Cordova: ", window.cordova);在某个被执行的 js 文件中的某处输出它。检查控制台输出的工作原理如下面的答案所述
标签: android angular cordova angular6 cordova-plugins