Cordova设备已经无法在iOS中启动

时间:2016-04-18 12:42:21

标签: ios cordova ionic-framework

我正在使用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中出错。

2 个答案:

答案 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 () {
...
})

它适用于真实设备,我从未在模拟器上测试过。 我不认为内容安全政策是你没有参加活动的原因。