从Chrome 50开始,除非页面托管在安全来源上,否则Google已删除了Chrome浏览器进行地理位置查找的功能。

参见https://www.chromium.org/Home/chromium-security/prefer-secure-origins-for-powerful-new-features

我正在构建一个将嵌入在我无法控制的网站上的小部件,并且该小部件具有某些地理位置功能。如果用户使用的是Chrome,并且原点不安全,我想在我的小部件中隐藏与地理位置相关的用户界面。

如何检测非安全来源?

更新资料

我最初的想法是做这样的事情:

const geolocationPermitted = () => {
  return (!window.chrome) || window.location.protocol == 'https:';
}

但是此测试在本地进行开发时失败,因为我是通过纯http从本地主机提供站点的。 Chrome认为这是安全的,并且上面的函数返回false。

最佳答案

我发现Chrome和Firefox确实将此属性公开为:

https://developer.mozilla.org/en-US/docs/Web/API/Window/isSecureContext



我当前的测试是:

browserHasLocation = () => {
    return navigator.geolocation && (!window.chrome || window.isSecureContext);
}

07-28 03:46
查看更多