Cordova DeviceRady在iOS中未开火

Cordova DeviceRady在iOS中未开火,ios,cordova,ionic-framework,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中激发

我正在使用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
My index.html中的我的安全设置:

<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src  'self' 'unsafe-inline' *">
e、 g:

当我用iOS模拟器测试它时,它仍然失败并在console.log中抛出“deviceready”错误。

我用

 $ionicPlatform.ready(function () {
...
})
它在真实的设备上工作,我从未在模拟器上测试过。 我不认为内容安全策略是您无法获得该活动的原因。

我用

 $ionicPlatform.ready(function () {
...
})
它在真实的设备上工作,我从未在模拟器上测试过。
我不认为内容安全策略是您无法获得该事件的原因。

如果您使用的是Ionic,那么为什么您要手动使用
文档。addEventListener('deviceready',function()
the
$ionicPlatform.ready
会给您与cordova的“deviceready”相同的结果,无需再次调用deviceready

另外,您不应该将ready函数放在控制器的custom函数中。不应该这样使用

$scope.logInSubmit = function (details)  {}
$ionicPlatform.ready(function() {
  console.log('dashboard -> device ready');
  //you can load your plugins or custom objects inside this device ready
}

如果您查看爱奥尼亚的示例,您将更好地了解这两个项目(例如:爱奥尼亚启动myApp选项卡)

在Ionic中,您的代码可以是这样的

$scope.logInSubmit = function (details)  {}
$ionicPlatform.ready(function() {
  console.log('dashboard -> device ready');
  //you can load your plugins or custom objects inside this device ready
}

如果您使用的是Ionic,那么手动使用
document.addEventListener('deviceready',function()
the
$ionicPlatform.ready
的结果与cordova的“deviceready”相同,无需再次调用deviceready

另外,您不应该将ready函数放在控制器的custom函数中。不应该这样使用

$scope.logInSubmit = function (details)  {}
$ionicPlatform.ready(function() {
  console.log('dashboard -> device ready');
  //you can load your plugins or custom objects inside this device ready
}

如果您查看爱奥尼亚的示例,您将更好地了解这两个项目(例如:爱奥尼亚启动myApp选项卡)

在Ionic中,您的代码可以是这样的

$scope.logInSubmit = function (details)  {}
$ionicPlatform.ready(function() {
  console.log('dashboard -> device ready');
  //you can load your plugins or custom objects inside this device ready
}

谢谢@simon schüpbach!我现在更改了代码(请参阅我编辑的帖子),但在模拟器中仍然失败。我在我的内容安全策略中添加了gap://ready,之后,一切正常。谢谢@simon schüpbach!我现在更改了代码(请参阅我编辑的帖子)但它在模拟器中仍然失败。我在我的内容安全策略中添加了gap://ready,之后,一切正常。谢谢@Pyro!我不知道“document.addEventListener('devicerady',function()”已经包括“$ionicPlatform.ready”@Stefanblatmann补充参考:如果这个答案对你有帮助,请勾选正确答案。thanks@Pyro在控制器内部使用ready函数有什么不对?如果您想在控制器内部执行一些插件操作,则必须等待开发准备就绪。@SimonSchüpbach可以在任何控制器内部使用它。我是说,除了默认函数之外,在任何控制器的自定义函数中调用都是不好的。默认函数也更新了answerThank@Pyro!我不知道“document.addEventListener('devicerady',function()”已经包括“$ionicPlatform.ready”@Stefanblatmann补充参考:如果这个答案对你有帮助,请勾选正确答案。thanks@Pyro在控制器内部使用ready函数有什么不对?如果您想在控制器内部执行一些插件操作,则必须等待开发准备就绪。@SimonSchüpbach可以在任何控制器内部使用它。我是说,在任何控制器的自定义函数中调用都是不好的,除了默认函数之外。默认函数也更新了答案