我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chrome不会触发此事件,因此我的代码并未初始化。
这里是我的代码的简化版本:
var dashboard = {}; $(document).ready(function() { document.addEventListener("deviceready", dashboard.onDeviceReady, false); }); dashboard.onDeviceReady = function() { alert("hello!"); //this is never fired in Chrome };
我试过使用StopGap代码:
var e = document.createEvent('Events'); e.initEvent("deviceready"); document.dispatchEvent(e);
但是,当我在Chrome JavaScript控制台中运行该代码时,“hello”警报仍然不会触发。我究竟做错了什么?或者Chrome不支持发射像deviceready这样的“自定义”事件?
回复:
最终拉出StopGap代码并且必须引入一个小小的延迟(将这些代码运行在一个单独的脚本中,而不是页面特定的代码中):
window.setTimeout(function() { var e = document.createEvent('Events'); e.initEvent("deviceready", true, false); document.dispatchEvent(e); }, 50);
将这段代码添加到你的onLoad处理函数中:
if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) { document.addEventListener("deviceready", onDeviceReady, false); } else { onDeviceReady(); }