deviceReady事件在启动应用程序时未触发。
从屏幕顶部向下拖动通知列表并释放它会导致deviceReady触发。
同样,在inAppBrowser中显示页面时,直到通知被拖拽并释放后才会显示。
config.xml中的关键元素是:-
<gap:plugin name="cordova-plugin-whitelist" version="1.0.0" source="npm" />
<gap:plugin name="cordova-plugin-inappbrowser" source="npm" version="1.0.1" />
<gap:plugin name="cordova-plugin-device" source="npm" version="1.0.1" />
<preference name="permissions" value="none"/>
<preference name="fullscreen" value="true" />
<preference name="exit-on-suspend" value="true" />
Html : -
<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Home</title>
<meta http-equiv="Content-Security-Policy" .... />
</head>
<body >
<div id="idSplash" class="textCenter" >
<div id="idSplashHeader">
<div class="headerImg"></div>
</div>
<div>
<div id="idSplashMessage">Starting up ...</div>
</div>
<div id="idSplashBody"></div>
<div id="idSplashFooter"><a id="idTestLink" href="javascript:null" target="_blank">Click here for google</a></div>
</div>
<!-- ************************************************************************** -->
<script src="js/jquery-2.0.3.min.js" type="text/JavaScript" ></script>
<script type="text/JavaScript">
$(document).ready(function () {
function onReady() {
$("#idSplashMessage").text("deviceReady");
alert("deviceReady");
}
document.addEventListener("deviceReady", onReady, false);
$("#idTestLink").click(function () {
var win = window.open(encodeURI("http://www.google.co.uk"), '_blank', 'location=yes');
return false;
});
});
</script>
<script src="cordova.js" type="text/JavaScript"></script>
</body>
</html>
问题的根源是在html中包含了内容安全策略。
虽然我相信CSP是完全有效的,并且没有引起Android的任何问题,但我删除了它,允许IOS版本工作。
首先添加CSP是因为来自白名单插件的错误日志表明它是必需的。
对于刚接触Cordova/Phonegap的开发者来说,这是一个常见的误解。
选自:Cordova/Phonegap开发者常犯的错误
4。在代码中,没有监听'deviceready'事件。
(…)我们需要的文档部分
这是一个非常重要的事件,每个Cordova应用程序都应该使用。
Cordova包含两个代码库:native和JavaScript。在加载本机代码时,将显示自定义加载图像。但是,JavaScript只在DOM加载后才加载。这意味着你的web应用程序可能会在加载之前调用Cordova JavaScript函数。
Cordova deviceready事件在Cordova完全加载后触发。设备启动后,您可以安全地调用Cordova函数。
这意味着您必须在调用任何其他库之前执行此操作。
这也意味着你需要在jquery之前加载cordova.js
。
例子function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
// _OR_ JUST
document.addEventListener("deviceready", onDeviceReady, false);
// Cordova is loaded and it is now safe to make calls Cordova methods
//
function onDeviceReady() {
document.addEventListener("pause", onPause, false);
$(document).ready(function () {
// Call the usual stuff.
}
}