在 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】:

问题可能是devicereadyevent 被触发 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 插件在 iOS 模拟器中未定义

在cordova-2.0.0中未定义的window.plugins [关闭]

离子屏幕方向 Cordova 插件在 iOS 环境中未锁定为纵向模式

Cordova:在桌面环境中未显示警报(它们在模拟器和真实设备上运行良好)

PhoneGap / Cordova 回调错误 - 在 PhoneGap 中未执行 RestKit 完成功能

Cordova开发-2 具体插件的使用