从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);
}