我们今天注意到根据用户的位置自动检测邮政编码的问题。它在其他浏览器中运行良好(边缘,IE,Firefox) 我们必须将网站配置为https,然后才能正常运行
示例:https://www.whatismyzip.com/效果很好 http://www.mapdevelopers.com/what-is-my-zip-code.php无效的地方。
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAdGQKI4sEj5TZAjNCds422V_ZHevD45Fo"></script>
<%-- <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>--%>
<%-- <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>--%>
<script type="text/javascript">
function ShowMessages() {
debugger;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success);
} else {
alert("Geo Location is not supported on your current browser!");
}
function success(position) {
debugger;
var lat = position.coords.latitude;
var lng = position.coords.longitude;
var latlng = new google.maps.LatLng(lat, lng);
var geocoder = geocoder = new google.maps.Geocoder();
geocoder.geocode({ 'latLng': latlng }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
var searchAddressComponents = results[0].address_components,
searchPostalCode = "";
$.each(searchAddressComponents, function () {
if (this.types[0] == "postal_code") {
searchPostalCode = this.short_name;
}
});
document.getElementById('hidden1').value = searchPostalCode
__doPostBack('', '');
}
}
});
}
}
任何帮助/解决方法都将不胜感激。
编辑:除了Google API之外,还有其他可行的替代方法吗?
答案 0 :(得分:12)
您不能将HTML5 Geolocation API与非安全连接一起使用,如下所示:
从Chrome 50开始,Chrome不再支持获取 用户在交付页面中使用HTML5 Geolocation API的位置 通过非安全连接。这意味着正在制作的页面 地理位置API调用必须从安全上下文中提供,例如 HTTPS。
但是,可以使用Google Maps Geolocation API或GeoIP,也可能使用其他,但从长远来看不建议这样做。见下文:
有许多后备选项可供用户使用 不受此更改影响的位置,例如Google地图 Geolocation API,GeoIP(作为一个例子,还有其他基于geo的 解决方案)和用户输入的邮政编码。但是,我们强烈 建议确保持续访问地理位置的最佳途径 是移动到HTTPS。
来源:Geolocation API removed from unsecured origins in Chrome 50
答案 1 :(得分:5)
在不安全来源上弃用强大功能
Chrome Security最初将其发送到各种浏览器开发邮件列表。请参阅blink-dev上最初的意向弃用电子邮件。这是基于最初的想法,更喜欢安全起源的强大新功能。
<强>提案强>
我们希望开始应用已经发布的https://w3c.github.io/webappsec-secure-contexts/to功能中的概念,这些功能不符合(新的,当时不存在的)要求。特别是,这大约要求强大的功能只能在“安全起源”(例如HTTPS
)上访问,其中完整的祖先链也是安全的。
他们已经开始要求这些现有功能的安全起源:
Geolocation — requires secure origins as of M50
Device motion / orientation
EME
getUserMedia
AppCache
与逐渐marking HTTP as non-secure一样,我们希望根据使用阈值逐步将这些功能迁移到仅安全状态,从最低使用率开始向更高阶段发展。我们还希望在UX中逐渐表明,对于非安全来源,这些功能已被弃用。
每个功能的弃用策略尚未确定,并且可能因功能而异。我们目前不知道阈值是什么,或者这些特征对于什么类型的起源有多大的用处。我们正在收集数据,并会在收到数据时向您报告。除了最终的弃用之外,目前根本没有确定的计划。我们打算这样做可以激发公众讨论解决这种弃用问题的最佳方法。
测试弃用的强大功能
在弃用某项功能后,如果您是需要在没有有效证书的服务器上继续测试功能的开发人员,则有两种选择:
localhost
被视为HTTP上的安全源,因此如果您能够从localhost运行服务器,则应该能够在该服务器上测试该功能。
您可以使用--unsafely-treat-insecure-origin-as-secure="http://example.com"
标志运行chrome(将“example.com”替换为您实际要测试的来源),这会将该来源视为此会话的安全。请注意,您还需要包含--user-data-dir=/test/only/profile/dir
以创建新的测试配置文件,以使该标志生效。
答案 2 :(得分:4)
Chrome 50
中引入的新安全规则不会向没有Transfer Encryption
的网站发送位置信息。
Here是适用于Mapping API问题的替代方案。
恢复到早期版本的Chrome(50)也是一种解决方案,但在Web开发中,这样做很难。
但事实是,目前只有 Chrome 与Mapping API
存在此类问题,其他浏览器仍支持(Which gives me a short term peace of mind)
。
但迟早,其他浏览器也可能会这样做,这对于不像我的现有用户来说可能是个大问题。由于这是一个长期的过程(在我的情况下),最好开始开发和迁移到https网站而不是http,但是处理它们的方式是pros and cons。
答案 3 :(得分:3)
我知道这不是一个值得讨论的地方,但这个答案可能代表了大多数已经在其应用程序中实现了地理位置的程序员。
如其他答案中所述&#34; Geolocation API removed from unsecured origins in Chrome 50&#34;。
嗯,这是谷歌的一个奇怪的举动
他们声称这些更改是由用户隐私造成的。
这严重损害了用户隐私。
Google关心用户隐私(笑) 我使用HTML5 Geolocation API开发了大量应用程序(CMS插件,独立应用程序模板)供公众使用 我无法向1000位用户说明获得SSL证书。
从我的观点来看,谷歌正试图让大多数独立开发者和超级用户&#34;。
的互联网更加昂贵且无法访问。替代方案是:
使用Google的地理位置API(有限的请求,支付更多费用)
获得付费服务。
获取并安装SSL证书
我尝试从同一服务器上的HTTPS位置和公共访问的CDN(github)加载地理定位脚本,但出现了同样的错误。
Chrome也需要在网站上安装SSL。