我有以下 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 中是否允许定位服务。
如果从主屏幕运行时重新加载页面,也会出现此问题。
有办法解决这个问题吗?这是一个常见问题吗?
最佳答案
是的,iOS 网络应用程序使用 apple-mobile-web-app-capable
元标记,允许通过 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 );
关于javascript - iOS WebApp 不允许定位服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11480151/