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 一起使用