在Cordova / PhoneGap 3.4环境中使用geolocation插件时遇到一些问题。 我没有加载onDeviceReady中的Geolocation API,因为它依赖于加载Google Maps API而且我很确定提交给App Store的任何应用都会被拒绝,如果它在初始加载时从互联网请求(任何人都可以随时确认反驳)
我正在使用Jquery Mobile 1.4.2并将地理位置代码放在一个单独的“定位器”页面上,该页面不会通过ajax加载。然后我调用地理位置按钮在Google地图上显示用户的位置。
我正在测试iPad上的应用程序,除了Geolocation在第一次检测位置时似乎总是失败的事实(我最近发布了这个问题),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>
我知道这肯定是Geolocation调用导致滞后,因为我从页面中删除它们并测试了页面加载时间。有没有人遇到过同样的问题?有没有人知道为什么它会如此严重地影响页面加载时间?
答案 0 :(得分:0)
在这里面对一刻的耳光。刚刚意识到这是通过javascript加载的Google Map Api导致问题。我已经尝试通过在页面中进一步加载外部脚本来解决它,但我只是经历了很小的改进。
catch 22是我需要在页面中调用这个JS。是否有可能显示加载栏/图形显示,而页面加载外部js脚本,所以至少有一些事情发生在它相对下载的几秒钟内。所以&#39;在澳大利亚的连接速度?