我正在使用Ionic来构建我的混合应用程序。 在Android上我的应用程序运行得很好。现在我正在为iOS构建它,但我的整个内容都包含在
中document.addEventListener('deviceready', function () {
console.log('dashboard -> device ready');
// copy database to the device
DbAccess.copyDb();
}, false);
iOS中没有触发。
我尝试使用iOS模拟器
$ ionic emulate ios --livereload
并检查了console.log。
结果:
1 709252 log deviceready has not fired after 5 seconds.
2 709253 log Channel not fired: onCordovaInfoReady
我按照我在这里和谷歌找到的建议,但遗憾的是没有任何成功(删除ios并重新添加等)
我的版本:
Cordova: 6.1.1
Ionic: 1.7.14
我的index.html中的我的安全设置:
<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline' *">
在我的config.xml中:
<access origin="geo:*" launch-external="yes"/>
<access origin="tel:*" launch-external="yes"/>
<access origin="mailto:*" launch-external="yes"/>
我真的不知道在哪里可以继续解决这个bug。也许它与内容安全政策有关,但我不知道如何解决这个问题。
提前感谢您的帮助!
编辑: 我现在将控制器包裹在
中$ionicPlatform.ready(function() {...});
e.g:
var dashboardCtrl = function ($scope, $ionicPlatform, $cordovaDevice, DbAccess) {
console.log('dashboardCtrl');
$ionicPlatform.ready(function () {
console.log('dashboard -> platform ready');
document.addEventListener('deviceready', function () {
console.log('dashboard -> device ready');
// copy database to the device
DbAccess.copyDb();
}, false);
});
};
dashboardCtrl.$inject = ['$scope', '$ionicPlatform', '$cordovaDevice', 'DbAccess'];
它仍然失败并抛出&#34; deviceready&#34;我在使用iOS模拟器测试时,在console.log中出错。
答案 0 :(得分:2)
如果您使用的是Ionic,为什么要手动使用document.addEventListener('deviceready', function ()
,$ionicPlatform.ready
会为您提供与&#39; deviceready&#39;相同的结果。对于cordova,无需再次调用deviceready。
另外,你不应该把ready函数放在控制器的自定义函数中。 不应该像这样使用
$scope.logInSubmit = function (details) {}
或
var submit = function () {}
如果您检查 Ionic 样本,您将更好地了解这两个项目(例如:离子启动myApp标签)
在Ionic中你的代码就像这样
$ionicPlatform.ready(function() {
console.log('dashboard -> device ready');
//you can load your plugins or custom objects inside this device ready
}
答案 1 :(得分:1)
我用
抓住了这个事件 $ionicPlatform.ready(function () {
...
})
它适用于真实设备,我从未在模拟器上测试过。 我不认为内容安全政策是你没有参加活动的原因。