バックグラウンド:
phonegap build(1.6.1)を使用してビルドしているphonegapアプリを実行しています。
androidビルドは問題なく動作しているようですが、iOS(iPhone 3GS 16M iOS:5.0.1(9A405))ではdeviceready
イベントが発生しません。
私はここで何が欠けているのかを理解しようとしています。
deviceready
質問:1。イベントのバインドがインクルードの前か後かは重要phonegap.js
ですか?2.イベントが「早すぎて」発生していて、ハンドラーがまだそれにバインドされていない可能性がありますか?3.デバイスの準備ができていることを確認するためのポーリングベースの方法はありますか?4. JQueryに関連してdevicereadyの処理はどこで行う必要があり$(document').ready
ますか?
私のコード:私の現在のコードは3つのことを同期しようとしています:1。JQueryの.ready
イベント2.PhoneGapのイベント3.window.navigator.device.platformでのdeviceready
(注意深い)ポーリング結果
次のように:
<!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>
コードの結果:通常のブラウザー(クロム)で次のようになります。
デフォルトのHTML ポーリング||bodyスクリプトの実行||jquerydocument.readyイベントが発生しました startIfAllReady window.myapp.JQueryReady = true window.myapp.deviceReady = false window.myapp.started = false 開始できません ポーリング ポーリング ポーリング ...(およびポーリング....)
iPhoneで:
デフォルトのHTML ポーリング||bodyスクリプトの実行||jquerydocument.readyイベントが発生しました startIfAllReady window.myapp.JQueryReady = true window.myapp.deviceReady = false window.myapp.started = false 開始できません
ご覧のとおり、「phonegap devicereadyイベントが発生した」ことはなく、ポーリングも機能していないようです:(
iPhoneでは、開始時に1つの「ポーリング」ログエントリのみが...iPhoneがonTimeoutを処理できないことに注意してください。なぜdevicereadyイベントを取得しないのですか?!
私が気付いたもう1つのことは、デバッグセットを使用して(phonegap)ビルドすると、PhoneGapBuildのデバッグウィンドウにデバイス/アプリが短時間表示され、その後消えてしまうことです。
ありがとう
更新:上記のポーリングループが間違っています。window.navigator.platformを探す必要があります
とにかく私はそれをすべて一緒に落としました。何かが機能していないだけです。