1

我正在使用 Ripple 0.9.9 来测试我的 PhoneGap 2.0 应用程序,但在设置它时遇到了麻烦。我已阅读此站点上的相关问题,但没有任何内容可以解决我的问题:

根据phonegap deviceready 事件 - 波纹模拟器- 波纹模拟器将ripple.js 注入页面,其中包含 phonegap api 模拟器。因此,在 Ripple 内部进行测试时,不要在页面中包含您的 phonegap.js/cordova.js。

用来调用我的onload<body 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)似乎涟漪将用户代理更改为 iPhone 4 的用户代理,然后重新加载页面。

这是正常行为吗?

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

4

1 回答 1

0

对于 deviceready 事件,请确保您从 Ripple 的左侧“平台”面板启用了 phonegap 平台。如果使用的是非PhoneGap 平台,那么我会想象不会触发 deviceready 事件。

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

建议更新到 0.9.11

于 2013-01-14T15:05:28.600 回答