iOS WebApp不允许定位服务?

时间:2012-07-14 01:05:45

标签: javascript jquery iphone ios iphone-standalone-web-app

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

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

有没有解决这个问题?这是一个常见的问题吗?

2 个答案:

答案 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开发人员计划中,那么您最终应该查看官方文档。

检查出来:http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/GettingGeographicalLocations/GettingGeographicalLocations.html#//apple_ref/doc/uid/TP40002051-CH5-SW2