gpt4 book ai didi

ios - deviceready 事件未在基于 1.6.1 的 phonegap 构建应用程序中触发

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:51:47 24 4
gpt4 key购买 nike

背景:

我正在运行我正在使用 phonegap build (1.6.1) 构建的 phonegap 应用程序。

android 构建似乎工作得很好,但是在 iOS (Iphone 3GS 16M iOS: 5.0.1 (9A405) ) 上我从来没有得到 deviceready 事件。

我想弄清楚我在这里遗漏了什么。

问题:1. deviceready 事件的绑定(bind)是在包含 phonegap.js 之前还是之后有关系吗?2. 事件是否发生“太早”并且我的处理程序尚未绑定(bind)到它?3. 是否有基于轮询的方法来确定设备是否准备就绪?4. 与 JQuery 的 $(document').ready 相关的 deviceready 应该在哪里处理?

我的代码:我当前的代码试图同步 3 件事:1. JQuery的.ready事件2.PhoneGap的deviceready事件3.(小心)window.navigator.device.platform上的轮询结果

通过以下方式:

<!DOCTYPE html>
<html>
<head>

<script type="text/javascript" src="./scripts/jquery-1.7.2.js"></script>
<script type="text/javascript" src="./scripts/jquery.myapp.js"></script>

<script type="text/javascript">
window.myapp={
deviceReady:false,
JQueryReady:false,
started:false,
logbuf:[]
}

function log(m){
window.myapp.logbuf.push(m);
console.debug(window.myapp.logbuf.join('||'));
var el=document.getElementById('container');
if (el!=null) {
el.innerHTML+=', ' + window.myapp.logbuf.join('||') ;
window.myapp.logbuf=[];
}
}

//Wait for device
function onDeviceReady() {
window.myapp.deviceReady=true;
log('phonegap deviceready event fired');
startIfAllReady();
}
document.addEventListener("deviceready", onDeviceReady, false);

function pollDevice(){
if (window && window.navigator && window.navigator.device && window.navigator.device.platform ) {
log('polling found device');
window.myapp.deviceReady=true;
startIfAllReady();
}
else {
log('polling');
window.setTimeout(arguments.callee,500);
}
}

pollDevice();

//Wait for jquery
$(document).ready(
function(){
window.myapp.JQueryReady=true;
log('jquery document.ready event fired');
startIfAllReady();
}
);


function startIfAllReady(){
log('startIfAllReady window.myapp.JQueryReady=' + window.myapp.JQueryReady + ' window.myapp.deviceReady=' + window.myapp.deviceReady + ' window.myapp.started=' + window.myapp.started );
if (window.myapp.deviceReady && window.myapp.JQueryReady && window.myapp.started==false) {
log('starting');
started=true;
renderClient();
}
else {
log('cant start');
}
}

function renderClient(){
log('renderClient called - RETURNING !');
return;
window.setTimeout(function(){window.scrollTo(0, 1)},100);
log('create myappClient');
$('#myappClientContainer').empty().myappClient(
{width:$(window).width(),
height:$(window).height()
}
);
}

</script>

<script type="text/javascript" src="phonegap.js"></script>

<link rel="stylesheet" type="text/css" href="./styles/client.css" />
<style>
html , body { margin:0px; background-color:gray;}
</style>

<title>myapp</title>
</script>
</head>
<body style="width:100%">

<script>
log('body script executing');
</script>
<div style="width:100%" id="myappClientContainer">DEFAULT HTML</div>
</body>
</html>

代码结果:在常规浏览器(chrome)中,我得到:

DEFAULT HTML  polling||body script executing||jquery document.ready event fired  startIfAllReady window.myapp.JQueryReady=true window.myapp.deviceReady=false window.myapp.started=false   cant start   polling   polling   polling   ... (and polling....)  

在 iPhone 上:

DEFAULT HTML  polling||body script executing||jquery document.ready event fired  startIfAllReady window.myapp.JQueryReady=true window.myapp.deviceReady=false window.myapp.started=false   cant start

如您所见 - 任何地方都没有“phonegap deviceready event fired”,轮询似乎也不起作用:(

请注意,在 iphone 上,开始时只有一个“轮询”日志条目...iPhone 不能处理 onTimeout 吗?为什么我没有收到设备就绪事件?!

我注意到的另一件事:当使用调试集构建 (phonegap) 时,我可以在 PhoneGapBuild weinre 调试窗口中看到设备/应用程序一小段时间,然后它就消失了。

谢谢

更新:我上面的轮询循环是错误的,它应该寻找 window.navigator.platform

不管怎样,我把它们放在一起了。有些东西不起作用。

最佳答案

令人惊讶的是,我的问题通过添加解决了 ..script src="phonegap.js...到我的 html 文件

来源: http://community.phonegap.com/nitobi/topics/javascript_events_not_working_with_android_phonegap_build_xcode

我的印象是构建过程添加了 ipmort 并且我特别困惑,因为当我绕过 deviceready 事件时一切都很好。希望这会有所帮助。

关于ios - deviceready 事件未在基于 1.6.1 的 phonegap 构建应用程序中触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com