5

我有以下 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 中是否允许位置服务。

如果在从主屏幕运行时重新加载页面,也会出现此问题。

有没有什么办法解决这一问题?这是个常见的问题吗?

4

2 回答 2

1

是的,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 );
于 2012-07-14T06:39:46.097 回答
0

Apple 有自己的方式来获取 webApps 的本地化。如果您在 iOS 开发人员计划中,您绝对应该查看官方文档。

看看这个:http: //developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/GettingGeographicalLocations/GettingGeographicalLocations.html#//apple_ref/doc/uid/TP40002051-CH5-SW2

于 2012-07-14T01:10:59.887 回答