iOS WebApp 不允许定位服务?

Posted

技术标签:

【中文标题】iOS WebApp 不允许定位服务?【英文标题】:iOS WebApp's don't allow location services? 【发布时间】:2012-07-14 01:05:44 【问题描述】:

我有以下 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 中显示邮政编码。

这在移动版 Safari 和桌面版 Safari 中都能正常工作,但我一添加 apple-mobile-web-app-capable 元标记,代码就会中断。

我在每一步之后都将代码日志记录到控制台,并且在常规 Safari 和 Mobile Safari 中都可以顺利运行。一旦我将它添加到我的主屏幕(头部带有元标记),该应用程序甚至不会运行 JS 代码。它也没有麻烦登录到控制台,这让我想知道 WebApps 中是否允许定位服务。

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

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

【问题讨论】:

【参考方案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 );

【讨论】:

HTML 只是一个 div。这在最基本的层面上不起作用。从主屏幕运行,您的代码有效。 @Charlie 好的,如果我的示例有效,那么您知道这不是定位服务。它必须是您的 Javascript 中的其他内容。逐步剥离所有内容,直到找到为止。请记住,从主屏幕运行的应用程序使用不同的 Javascript 引擎,因此通常可以看到它与移动 Safari 之间的差异。 它几乎都被剥离了,我怎么能把它分解得更远? 这两个建议都显示了主屏幕应用程序中的邮政编码,但随后出现了第二个问题:尝试重新加载页面,如果您想要重新检查邮政编码,这将具有现实生活中的场景移动到新位置,破坏密码,并且根本不会显示邮政编码。如果还不够清楚,我会重申,我太累了,说不出来哈哈。 @Charlie 所以这解决了你最初的问题,“定位服务在 iOS 应用程序中工作吗?”,现在你遇到了一个新问题?【参考方案2】:

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

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

【讨论】:

我正在尝试制作这个相对跨设备的东西,我不想使用只适用于 iPhone 的东西。根据我对代码的理解,它适用于其他某些浏览器,如果我采用这种方法,我认为我会失去...... 我的代码已经使用了geolocation.getCurrentPosition,这就是它在文档中所说的使用。 我喜欢 jQuery,但我并不真正理解它,因为我学会了使用它,而不是它是如何工作的。当我的代码中断时我会做什么,将其复制/粘贴到文本编辑器中,然后逐步将其复制回来。首先,尝试只打印坐标。 getJSON 部分可能有问题

以上是关于iOS WebApp 不允许定位服务?的主要内容,如果未能解决你的问题,请参考以下文章

Android Phonegap 3 webapp白名单不起作用

IOS8 LocationServices,权限恢复为既不允许也不不允许。不更新位置

Express-Socket.IO 应用程序无法与我的 Azure WebApp 一起使用

WEBAPP

Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)

微服务架构和层