在Cordova 3.2.0中,deviceready事件无法触发

4
我正在使用 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"); });

"test"从未显示。


可能是 https://dev59.com/gHTYa4cB1Zd3GeqPysnm 的重复问题。 - Ignitor
3
蠢问题:你确定 cordova-x.js 被正确地包含了吗? - Ignitor
2个回答

9
正如ignitor所猜测的那样,我忘记了添加cordova.js。 虽然我必须要说,在我的辩护中(:P),如果在根目录上没有这个脚本,就像它存在一样添加一个脚本是很奇怪的(至少在浏览器中测试时)。

2
为了在浏览器中进行测试,您可以考虑使用Phonegap-Desktop,它在浏览器中模拟了一些Cordova API。 - Ignitor
1
我使用CLI工具创建了一个Cordova项目,并错误地假设依赖项会自动注入到根HTML中。显然,这并没有发生,所以这是我的错误。 - DonSteep

3
问题可能是在DOM准备好之前就触发了deviceready事件,即在执行$(document).ready()回调之前触发。
你应该尝试独立绑定到deviceready,而不是$(document).ready()。 请参考此答案以了解如何实现。

1
这不应该是这种情况。Cordova文档说:“deviceready事件的行为与其他事件略有不同。在deviceready事件触发后注册的任何事件处理程序都会立即调用其回调函数。”因此,如果在初始触发后附加了deviceready事件,则应立即返回。(我突然遇到了与作者相同的问题,但这在过去对我有效。) - Jason Farnsworth
噢,那个句子是在2.2.0版本中出现的。所以问题是这个功能是在2.2.0中引入的还是仅在2.2.0之前未被记录。另一方面,操作者使用的是3.2.0,所以毕竟无关紧要。:-/ - Ignitor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接