Onload事件触发两次,而deviceready根本不触发

时间:2012-11-25 10:35:19

标签: cordova onload ripple

我正在使用Ripple 0.9.9来测试我的PhoneGap 2.0应用程序但是无法进行设置。我已经在本网站上阅读了相关问题,但没有解决我的问题:

根据phonegap deviceready event - ripple emulator - 纹波仿真器将ripple.js注入页面,其中包含phonegap api仿真器。因此,在Ripple中进行测试时,请不要在页面中包含phonegap.js / cordova.js。

使用<body onload="onLoad()">来调用我的onload处理程序,我有以下JavaScript:

var mobile=false;

function onLoad() {
console.info("inside onload...");
var uA = navigator.userAgent;
if (uA.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
    console.info("on phone: " + navigator.userAgent);
    document.addEventListener("deviceready", function() { mobile=true; appReady(); }, false);
} else {
    if (uA.match(/Chrome/)) {
        console.info("on browser: " + navigator.userAgent + ", do not initiate mobile app for Chrome since will be init. by Ripple");

    } else {
        /* not running on Chrome so no Ripple */
        appReady();
    }
}

}

当我在iPhone 4上运行的Ripple仿真器(设置为Phonegap / Cordova 2.0)中运行我的index.html时,我看到以下调试(init.js是我的js文件):

inside onload... init.js:19

on browser: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) 

Chrome/23.0.1271.64 Safari/537.11, do not initiate mobile app for Chrome since will be init. by Ripple init.js:26

Ripple :: Environment Warming Up (Tea. Earl Gray. Hot.) ripple.js:475

cordova :: Initialization Finished (Make it so.) ripple.js:475

inside onload... init.js:19

on phone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3 

我可以看到onload事件被触发两次:a)普通浏览器和b)似乎ripple将用户代理更改为iPhone 4的用户代理,然后重新加载页面。

这是正常行为吗?

永远不会调用'deviceready'事件。知道为什么不呢?

1 个答案:

答案 0 :(得分:0)

对于deviceready事件,请确保已在Ripple的左侧“平台”面板中启用了phonegap平台。如果正在使用非PhoneGap平台,那么我认为不会触发deviceready事件。

至于双页重新加载,是的,这是Ripple的临时行为,旨在强制某些页面事件以必要的顺序发生。然而,最新版本(0.9.11)已经解决了这个问题。在您的内容加载后,您不应该看到Ripple强制额外加载页面。

建议更新至0.9.11