在与 iOS 交互之前,Cordova 设备准备好在 iOS 中不触发
Cordova deviceready not firing in iOS until interacting with iOS
我有一个非常奇怪的错误,其中 deviceready 事件不会在 iOS 设备中触发,直到用户与 OS 本身交互,即按下前按钮,显示通知中心向下拖动或向上拖动进入设备设置。
一旦用户开始拖动 iOS 通知中心,deviceready 就会触发。
像这样简单的东西是行不通的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap:* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
<title></title>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
var log = document.getElementById("log");
if(window.cordova){
log.innerHTML = "with cordova";
document.addEventListener("deviceready", function onDeviceReady(){
log.innerHTML = "deviceready";
}, false);
}else{
log.innerHTML = "with browser";
}
</script>
</body>
</html>
这个问题真的很微妙。我花了大约 4 小时调试 iOS 为什么 cordova 没有启动,直到我看到我只缺少两个 //
,就在这里:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap://* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
Content-Security-Policy 中的那个小 gap
必须有两个 //
才能工作。这解决了我的错误,我仍然不明白为什么.-.
希望对您有所帮助!
我在 iOS 上遇到了同样的问题。最后,这两种解决方法中的任何一种都适用于
将<meta http-equiv="Content-Security-Policy".......>
添加到索引中。
将平台降级到 4.0.0(Cordova 平台更新 iOS@4.0.0)
最好执行第一个选项,因为降级到 4.0.0 可能不适合您。
我有一个非常奇怪的错误,其中 deviceready 事件不会在 iOS 设备中触发,直到用户与 OS 本身交互,即按下前按钮,显示通知中心向下拖动或向上拖动进入设备设置。
一旦用户开始拖动 iOS 通知中心,deviceready 就会触发。
像这样简单的东西是行不通的:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap:* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
<title></title>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
</head>
<body>
<div id="log"></div>
<script type="text/javascript">
var log = document.getElementById("log");
if(window.cordova){
log.innerHTML = "with cordova";
document.addEventListener("deviceready", function onDeviceReady(){
log.innerHTML = "deviceready";
}, false);
}else{
log.innerHTML = "with browser";
}
</script>
</body>
</html>
这个问题真的很微妙。我花了大约 4 小时调试 iOS 为什么 cordova 没有启动,直到我看到我只缺少两个 //
,就在这里:
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data:* gap://* tel:* 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" />
Content-Security-Policy 中的那个小 gap
必须有两个 //
才能工作。这解决了我的错误,我仍然不明白为什么.-.
希望对您有所帮助!
我在 iOS 上遇到了同样的问题。最后,这两种解决方法中的任何一种都适用于
将
<meta http-equiv="Content-Security-Policy".......>
添加到索引中。将平台降级到 4.0.0(Cordova 平台更新 iOS@4.0.0)
最好执行第一个选项,因为降级到 4.0.0 可能不适合您。