Flask本地服务应用无法调用getCurrentPosition()该如何解决?
Flask本地服务调用地理位置API的解决方法
现代浏览器为了保护用户隐私,要求
getCurrentPosition()、watchPosition()这类地理位置相关API必须在HTTPS安全源下调用,仅本地调试场景可以通过以下方案豁免限制:
方法1:使用Flask内置临时HTTPS(最快适配)
Flask自带生成临时自签名证书的能力,仅需修改启动配置即可:
- 如果你用命令行启动服务,将启动命令改为:
flask run --ssl-key=adhoc - 如果你在代码中用
app.run()启动,修改为以下写法:if __name__ == '__main__': app.run(ssl_context='adhoc')
启动后访问https://localhost:5000即可,首次访问浏览器会提示证书不安全,选择「继续前往」即可正常调试。
方法2:使用固定自签名证书
如果不想每次用临时证书,可以自己生成有效期更长的固定证书:
- 首先用openssl工具生成证书和密钥文件,命令行执行:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
执行过程中所有提示项都可以随意填写。 - 启动时指定证书路径即可,代码写法:
命令行启动写法:if __name__ == '__main__': app.run(ssl_context=('cert.pem', 'key.pem'))flask run --cert=cert.pem --key=key.pem
如果觉得证书不安全的提示麻烦,可以把生成的cert.pem导入到浏览器的受信任根证书列表中,就不会再弹出提示。
方法3:修改浏览器安全配置(无需改服务端)
如果不想用HTTPS协议,也可以给本地服务地址加浏览器安全豁免,以Chrome为例:
- 地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure打开配置页 - 找到Insecure origins treated as secure选项,切换为启用状态,在输入框中填入
http://localhost:5000 - 重启浏览器后配置生效,即可直接在HTTP源下调用地理位置API。
内容的提问来源于stack exchange,提问作者Ashis Sahoo
相关产品推荐
相关产品推荐

