在Cordova/PhoneGap 3.4環境中使用地理位置插件時遇到一些問題。 我沒有加載onDeviceReady中的Geolocation API,因爲它依賴於加載Google地圖API,我很確定提交給App Store的任何應用程序在初始加載時都會被拒絕(任何人都可以自由地確認是否反駁) )。爲什麼PhoneGap Geolocation API會導致我的頁面加載得太慢?
我正在使用Jquery Mobile 1.4.2並將地理位置代碼放置到不通過ajax加載的單獨「定位器」頁面上。然後,我會調用按鈕上的地理位置來顯示用戶在Google地圖上的位置。
我在iPad上測試應用程序,除了地理位置總是在第一次檢測位置時出現故障(我最近發佈了這個問題),JavaScript似乎推遲了頁面加載時間將近3秒(即使在iOS模擬器上也是如此!)。
我知道JavaScript的過度使用可能會導致一些滯後的PG應用程序,但我不相信這是發生在這裏。我呼籲所有的JavaScript在線:
<script type="text/javascript" charset="utf-8">
// onSuccess Geolocation
//
function onSuccess(position) {
var element = document.getElementById('geolocation');
//OUTPUT COORDINATES INFORMATION INTO HTML
element.innerHTML = '<h2>Detailed Gelocation information</h2><table class="geoTable"><tr><td class="noborder"></td><th>Latitude</th><th>Longitude</th><th>Altitude</th><th>Accuracy</th><th>Altitude Accuracy</th><th>Heading</th><th>Speed</th><th>Timestamp</th></tr>' +
'<tr><td class="head">Data Value</td>' +
'<td class="centre">' + position.coords.latitude + '</td>' +
'<td class="centre">' + position.coords.longitude + '</td>' +
'<td class="centre">' + position.coords.altitude + '</td>' +
'<td class="centre">' + position.coords.accuracy + '</td>' +
'<td class="centre">' + position.coords.altitudeAccuracy + '</td>' +
'<td class="centre">' + position.coords.heading + '</td>' +
'<td class="centre">' + position.coords.speed + '</td>' +
'<td class="centre">' + new Date(position.timestamp) + '</td></tr>'+
'</table>' +
'<p align="center"><button data-theme="h" onclick="resetLocation();">Clear GPS Location</button><br /></p>';
//GET LOCATION VARIABLES FROM API
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var yourStartLatLng = new google.maps.LatLng(lat, lng);
//PUT GMAPS INFORMATION INTO PAGE
$('#map_canvas').gmap({'center': yourStartLatLng});
$('#map_canvas').gmap('option', 'zoom', 19);
$('#map_canvas').gmap('option', 'mapTypeId', google.maps.MapTypeId.SATELLITE);
$('#map_canvas').gmap('addMarker', {
'position': yourStartLatLng,
'draggable': false,
'bounds': false
});
}
// onError Callback sends user an alert message and refreshes screen to load all scripts again
//
function onError(error) {
alert('The Freshwater application failed to get your location. Please ensure that you have a successful WIFI or 3G/4G internet connection when using the Geolocation feature. ' +
'The Locator screen will now be refreshed. Please attempt Geolocation again.');
//navigator.geolocation.getCurrentPosition(onSuccess, onError,
//{ maximumAge: 3000, timeout: 5000, enableHighAccuracy: false });
//PUT A TIMER ON ERROR TO REFRESH PAGE FOR GPS
setTimeout("window.location+='?refreshed';", .1000);
}
//RESET GEOLOCATION PAGE TO TAKE ANOTHER LOCATION READING
function resetLocation(){
setTimeout("window.location+='?refreshed';", .1000);
}
//ATTACH FUNCTION TO BUTTON TO CALL GEOLOCATION
function getLocation() {
navigator.geolocation.getCurrentPosition(onSuccess ,onError,
{ timeout: 1000, enableHighAccuracy: true });
}
</script>
我知道這肯定是我從網頁上刪除它們和測試頁面加載時間所造成的滯後地理位置通話。有沒有人遇到同樣的問題?有沒有人有一個想法,爲什麼它會嚴重影響頁面加載時間?
我曾嘗試使用getScript加載Google maps API,但它無法工作,因爲document.write不允許在異步加載的外部腳本上進行,除非它是明確打開的。 我很難找到如何解決這個問題...... –