Cordova 设备在 iOS 中未触发
Posted
技术标签:
【中文标题】Cordova 设备在 iOS 中未触发【英文标题】:Cordova deviceready not firing in iOS 【发布时间】:2016-04-18 12:42:21 【问题描述】:我正在使用 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
我遵循了我在这里和通过 Google 找到的建议,但不幸的是没有任何成功(删除 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"/>
我真的不知道在哪里可以解决这个错误。也许它与 Content-Security-Policy 有关,但我不知道如何解决。
提前感谢您的帮助!
编辑: 我现在把我的控制器包裹在里面了
$ionicPlatform.ready(function() ...);
例如:
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'];
当我使用 iOS 模拟器对其进行测试时,它仍然失败并在 console.log 中抛出“deviceready”错误。
【问题讨论】:
【参考方案1】:如果您使用 Ionic,为什么要手动使用 document.addEventListener('deviceready', function ()
$ionicPlatform.ready
会给您与科尔多瓦的“设备就绪”相同的结果,无需再次调用设备就绪。
另外,你不应该把ready函数放在控制器的自定义函数中。 不应该这样使用
$scope.logInSubmit = function (details)
或
var submit = function ()
如果您查看 Ionic 示例,您将更好地了解这两个项目(例如:ionic start myApp tabs)
在 Ionic 中,你的代码可以是这样的
$ionicPlatform.ready(function()
console.log('dashboard -> device ready');
//you can load your plugins or custom objects inside this device ready
【讨论】:
谢谢@Pyro!我不知道“document.addEventListener('deviceready', function ()”已经包含了“$ionicPlatform.ready” @StefanBlattmann 额外参考:ionicframework.com/docs/api/utility/ionic.Platform 如果此答案对您有帮助,请勾选正确答案。谢谢 @Pyro 在控制器内部使用 ready 函数有什么问题?如果您想在控制器内部执行一些插件操作,则必须等到设备准备就绪。 @SimonSchüpbach 可以在任何控制器中使用它。我是说在默认函数以外的任何控制器的自定义函数中调用都不好,也更新了答案【参考方案2】:我用
捕捉事件 $ionicPlatform.ready(function ()
...
)
它可以在真实设备上运行,我从未在模拟器上测试过。 我不认为 Content-Security-Policy 是您没有收到该事件的原因。
【讨论】:
谢谢@simon-schüpbach!我现在更改了我的代码(请参阅我编辑的帖子),但它仍然在模拟器中失败。 我在我的 Content-Security-Policy 中添加了 gap:// ready ,之后,一切都按预期工作。以上是关于Cordova 设备在 iOS 中未触发的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 设备上的 iframe 中未触发 Click/Tap 事件
在 Cordova 3.2.0 中未触发 deviceready 事件