phonegap adobe ios iPad deviceReady未被触发,直到通知显示



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.
    }
}

最新更新