我有以下JS获取用户的当前位置并显示其邮政编码...
(function ($, geolocation) {
if (geolocation) {
geolocation.getCurrentPosition(function (position) {
$.getJSON(
"http://ws.geonames.org/findNearestAddressJSON?callback=?",
{
lat : position.coords.latitude,
lng : position.coords.longitude
},
function (data) {
$(function () {
$('#zip').text(data.address.postalcode);
});
}
);
});
}
}(jQuery, navigator.geolocation));
在CodeReview上提供了帮助,因为我的原始代码非常糟糕,https://codereview.stackexchange.com/questions/13481/to-use-or-not-to-use-public-variables-in-javascript/13483#comment21844_13483
HTML:
<div id="zip"></div>
...然后在div中显示邮政编码。
这在Mobile Safari和桌面Safari中都可以正常使用,但是只要我添加apple-mobile-web-app-capable
元标记,代码就会中断。
我在每个步骤后都将代码记录到控制台,并且它在常规Safari和Mobile Safari中运行顺畅。一旦我将它添加到我的主屏幕(头部带有元标记),应用程序甚至不会运行JS代码。它也没有费心去登录到控制台,这让我想知道WebApps中是否允许使用位置服务。
如果从主屏幕运行时重新加载页面,也会出现此问题。
有没有解决这个问题?这是一个常见的问题吗?
答案 0 :(得分:1)
是的,使用apple-mobile-web-app-capable
元标记的iOS网络应用允许通过navigator.geolocation
提供位置服务。您没有错误回调,这可以为您提供问题的提示。发布您的HTML以进行进一步分析。
尝试将此仅放在页面上(设置apple-mobile-web-app-capable
):
navigator.geolocation.getCurrentPosition( function ( position ) {
alert( 'yay!' );
},
function ( error ) {
alert( 'boo! error: ' + error.message );
} );
根据您的评论,这是有效的,因此它不是位置服务。尝试更改最后一行括号的顺序。
} )( jQuery, window.navigator.geolocation );
此外,这看起来有点奇怪,因为对.text()
的调用会立即发生,而不是在.getJSON()
完成时:
function (data) {
$(function () {
$('#zip').text(data.address.postalcode);
});
}
尝试:
function (data) {
$('#zip').text(data.address.postalcode);
}
所以你的最终代码应如下所示:
( function ( $, geolocation ) {
if (geolocation) {
geolocation.getCurrentPosition( function ( position ) {
$.getJSON(
"http://ws.geonames.org/findNearestAddressJSON?callback=?",
{
lat : position.coords.latitude,
lng : position.coords.longitude
},
function (data) {
$('#zip').text(data.address.postalcode);
}
);
});
}
} )( jQuery, window.navigator.geolocation );
答案 1 :(得分:0)
Apple拥有自己的方式来获取webApps的本地化。如果您在iOS开发人员计划中,那么您最终应该查看官方文档。