Cordova DeviceReady 未触发

Cordova DeviceReady not firing

几天来我一直在努力解决这个问题。在尝试创建新的 FileTransfer() 对象时遇到一些 "object not defined" 错误后,问题看起来更基本——不知何故 DeviceReady 事件没有触发。

Stack Overflow 在这个问题上有很多点击率,但其中大部分都与具有不同架构的 3.x 之前的 cordova 构建有关(我使用的是 4.1.2)。我尝试了我能找到的较新主题中的建议——删除和添加插件、更新 cordova 等——但无济于事。为了找出问题所在,我将启动代码注释掉了几行:

Index.html:

<!DOCTYPE html>
<html>
<head>
  <title>Blah</title>
  <meta charset="utf-8"/>
  <meta name="viewport" content="initial-scale=1, user-scalable=no, minimum-scale=1, maximum-scale=1">
  <link href="res/topcoat/css/topcoat-mobile-light.min.css" rel="stylesheet">
  <link href="res/css/styles.css" rel="stylesheet">
  <link href="res/css/pageslider.css" rel="stylesheet">
  <script data-main="js/main" src="lib/require.js"></script>
</head>

Main.js:

require(["app/Application"], function (Application) {
  "use strict";

  document.addEventListener("deviceready", function(){
      $('body').html("<p>device is ready</p>");
  },true);

  $('body').html("<p>waiting...</p>");
});

稍后在正文中显示 "device is ready",屏幕只显示 "waiting..."。 iOS 模拟器和浏览器(cordova emulate browser)都会发生这种情况。

科尔多瓦信息:

$ cordova -v
4.1.2

插件信息:

$ cordova plugins
org.apache.cordova.globalization 0.3.3 "Globalization"

(如果不存在全球化,我会得到相同的结果)。

还有其他我应该查看的地方吗? 我是从命令行 运行,如果有区别的话。

我认为在这种情况下,您需要在申请中包含 cordova.js,因为我在您的示例中没有看到 cordova.js

<script src="cordova.js"></script>

注意:cordova.js的路径取决于它在您的应用程序中的位置

在我删除之前,最初并没有为我修复它

< meta http-equiv="Content-Security-Policy" content=".." / >

我最近遇到了同样的问题,但就我而言 cordova.js 已经正确包含在内。

最终对我有用的是 ios 平台的简单 removeadd

cordova platform remove ios
cordova platform add ios

自从我完全重新构建 ios 平台以来已经有一段时间了,在那段时间发生了其他重大变化(Cordova 升级、XCode 升级等)。我的 config.xml 或现有的 ios 构建可能在某种程度上不符合最新的 Cordova 要求。

我已经尝试解决这个问题 DAYS 天了,我终于 deviceready 触发了。问题是我扩展了 js Object 以插入我自己的隐藏和显示命令。删除允许 deviceready 触发的那些行:

Object.prototype.hide = function(){
    this.style.display = 'none';
}

Object.prototype.show = function(){
    this.style.display = 'initial';
}

注意:我还必须有 Alexander T

提到的行 <script src="cordova.js"></script>