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
平台的简单 remove
和 add
:
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>
几天来我一直在努力解决这个问题。在尝试创建新的 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
平台的简单 remove
和 add
:
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>