1

JQM (1.3.1)、jQuery(1.9)、CSS3、および JavaScript を使用して webapp を作成しました。現在、このアプリを phone gap (2.7) (ターゲット iOS(6.1)/ iPhone5 - 問題は iPhone 4S/ iOS 6.0 で再現できます

以下に示す私の位置情報コードは、ブラウザで実行すると正常に機能しました。

var geoOptions = { 'enableHighAccuracy': true, 'timeout': 10000, 'maximumAge': 0 };
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);

function geoSuccess(postion)
{
  //on success code here    
}
function geoError(error)
{
  //on error code here    
}

ただし、phonegap を通過すると、アプリは位置情報サービスにアクセスするためのユーザー許可を 2 回要求しました。つまり、ポップアップが 2 回表示されました。したがって、stackoverflow の多くのソリューションで提案されているように、以下のコードを使用したことを解決するために。

function onDeviceReady() {
 navigator.geolocation.getCurrentPosition(geoSuccess, geoError,geoOptions);
}

$(function() {
 document.addEventListener("deviceready", onDeviceReady, false);
});

これにより、ポップアップの問題は解決されましたが、新しい問題が発生しました。

問題: 位置情報サービスが無効になっている場合、私のコードは deviceready リスナーを追加し、deviceready イベントが発生するのを待ちますが、イベントは発生せず、ただそこに留まります。位置情報サービスがオンになっている場合、期待どおりに機能します。

以前にこの問題に直面した人はいますか?解決するために何をしたか教えてください。デバッグと調査に 1 日費やす価値はあります。

よろしくお願いします。

4

1 に答える 1

2

問題は解決された!:)

phonegap ビルドの記事で説明されているとおりに phone gap ライブラリを含めていなかったことがわかりました。

この記事を確認してくださいhttps://build.phonegap.com/docs/preparing-your-app

このライブラリを各ページに含める必要はありませんが、インデックス ページだけに含める必要があります。どのように違いがあるかはわかりませんが、他のページで phonegap.js への参照を削除した後、「deviceready」イベントが発生し始めましたが、 index.html。

次に気付いたのは、以下に示すエラー処理が何らかの理由で phonegap ビルド後に機能しなくなったことです。

switch(error.code) 
{
  case error.PERMISSION_DENIED:
   search.openPanelForSearch("Either the app was denied permission or the location srvice is currently turned off.", showInitialMap);
   break;
  case error.POSITION_UNAVAILABLE:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  case error.TIMEOUT:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case error.UNKNOWN_ERROR:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual serach instead?", showInitialMap);
   break;
}

以下に変更する必要がありました

switch(error.code) 
{
  case 1:
   search.openPanelForSearch("Either the app was denied permission or the location service is currently turned off.", showInitialMap);
   break;
  case 2:
   search.openPanelForSearch("Geolocation information was unavailable. Would you like to try out a manual search instead?", showInitialMap);
   break;
  case 3:
   search.openPanelForSearch("Service was timed out since it took too long to retrieve the gelolcations. Would you like to try out a manual serach instead?", showInitialMap);
   break;
  default:
   search.openPanelForSearch("Sorry an unknown error occurred. Would you like to try out a manual search instead?", showInitialMap);
   break;
}

これが誰かに役立つことを願っています。ありがとう。

于 2013-06-04T11:51:52.613 に答える