【问题标题】:Cordova DeviceReady not firingCordova DeviceReady 未触发
【发布时间】:2015-01-09 16:47:12
【问题描述】:

这几天我一直在努力解决这个问题。在尝试创建新的 FileTransfer() 对象时出现许多“对象未定义”错误后,看起来问题更基本——不知何故,DeviceReady 事件没有触发。

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

索引.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>");
});

稍后在正文中不会显示“设备已准备好”,而是显示“正在等待...”。这在 iOS 模拟器和浏览器(cordova emulate browser)上都会发生。

科尔多瓦信息:

$ cordova -v
4.1.2

插件信息:

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

(如果没有全球化,我会得到相同的结果)。

还有其他我应该寻找的地方吗?我正在从命令行运行,如果这有什么不同的话。

【问题讨论】:

    标签: javascript cordova cordova-cli


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      在我删除之前,它最初并没有为我解决问题

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

      【讨论】:

      • 谢谢 - 这导致了我的问题,它也可能与最初的问题有关。我在 iOS 上找到了这一点,但在 Android 上没有,当您的 Javascript 文件之一引用远程脚本或样式表时,它必须列在 Content-Security-Policy 中。使用 Android,您会在控制台中收到一条错误消息。在 iOS 中,它只是默默地死去,并不表明问题所在。问题是它无法访问被引用的脚本之一
      • 感谢您的提示。为什么会发生?我没有任何远程脚本
      • 这也是我的问题......由cordova元内容安全标签自动添加,阻止它触发onready。感谢您的提示!
      【解决方案3】:

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

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

      cordova platform remove ios
      cordova platform add ios
      

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

      【讨论】:

      • 请注意!我的插件文件夹中有一些不好的权限(绝望的时候),所以我需要在删除时使用sudo不要在添加 anything 时使用 sudo。
      【解决方案4】:

      我一直在尝试解决这个问题 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>

      【讨论】:

      • 从那以后我了解到扩展 javascript Object真的不好的做法。仅供参考,不要这样做
      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 2014-08-28
      相关资源
      最近更新 更多