在 Cordova 3.2.0 中未触发 deviceready 事件
Posted
技术标签:
【中文标题】在 Cordova 3.2.0 中未触发 deviceready 事件【英文标题】:deviceready event not firing in Cordova 3.2.0 【发布时间】:2013-12-18 19:47:27 【问题描述】:我正在使用 Cordova 3.2.0-0.3.0 和 NetBeans 7.4 来开发 Cordova 应用程序。虽然它在手机的 Chrome 浏览器中可以正常工作,但在我的手机(android 4.1.2)和模拟器(Android 4.3,API 级别 18)中似乎都不能正常工作。
问题似乎是deviceready
事件从未被触发。
这是代码:
app.onReady = function(callback)
$(document).ready(function()
// are we running in native app or in browser?
window.isphone = false;
if (document.URL.indexOf("http://") === -1
&& document.URL.indexOf("https://") === -1)
window.isphone = true;
if (window.isphone)
alert("isPhone");
document.addEventListener("deviceready", callback, false);
else
callback();
);
;
app.onReady(function() alert("test"); );
“测试”它从不显示。
【问题讨论】:
***.com/questions/17808586/…的可能重复 愚蠢的问题:你确定cordova-x.js
包含正确吗?
【参考方案1】:
正如点火器所猜测的那样,我忘记包含cordova.js
。
虽然我必须说,在我的辩护中 (:P),包含一个脚本是很奇怪的,就像它在你的根目录上时它不存在(至少在浏览器中测试时)。
【讨论】:
在浏览器中进行测试,可以考虑使用Phonegap-Desktop,它在浏览器中模拟了一些Cordova API。 我使用 CLI 工具创建了一个 cordova 项目,并以某种方式假设依赖项会自动注入到根 html 中。显然不是这样,我的错误也是如此。【参考方案2】:问题可能是deviceready
event 被触发在 DOM 准备就绪之前,即在执行$(document).ready()
回调之前。
您应该尝试独立于$(document).ready()
绑定到deviceready
。
有关如何执行此操作的示例,请参阅 this answer。
【讨论】:
不应该是这样的。 Cordova 文档说:“deviceready 事件的行为与其他事件有些不同。在 deviceready 事件触发后注册的任何事件处理程序都会立即调用其回调函数。”因此,如果 deviceready 事件在最初触发后被附加,那么它应该立即返回。 (我突然遇到了和作者一样的问题,但这在过去对我有用。) 哦。这句话出现在 2.2.0 版中。所以问题是这个特性是在 2.2.0 中引入的,还是在 2.2.0 之前没有记录。另一方面,op 使用 3.2.0,所以这并不重要。 :-/以上是关于在 Cordova 3.2.0 中未触发 deviceready 事件的主要内容,如果未能解决你的问题,请参考以下文章
在cordova-2.0.0中未定义的window.plugins [关闭]
离子屏幕方向 Cordova 插件在 iOS 环境中未锁定为纵向模式
Cordova:在桌面环境中未显示警报(它们在模拟器和真实设备上运行良好)