使用Chrome和不带HTTPS的localhost的JavaScript GetUserMedia

时间:2016-10-20 01:29:11

标签: javascript google-chrome ssl localhost getusermedia

我不知道如何在标题中表达它,但我遇到了Chrome问题。

我正在尝试在Chrome中使用GetUserMedia()GetPosition()。我知道它首先需要SSL认证,除非您在localhost。问题是,我无法在计算机上尝试我的项目,因此我必须使用智能手机,并且为了通过智能手机访问localhost,我必须使用机器的IP地址(192.168.1.4)。问题是Chrome不会将此IP地址视为localhost,因此需要SSL证书。

有没有办法在智能手机上测试我的项目而无需安装SSL认证?

4 个答案:

答案 0 :(得分:3)

您可以使用https://ngrok.com/之类的服务将带有SSL证书的公有DNS地址映射到本地计算机上的端口。

答案 1 :(得分:1)

将您的IP地址添加到Chrome的Insecure origins treated as secure setting

  1. 在Chrome中转到chrome://flags/#unsafely-treat-insecure-origin-as-secure

  2. 找到Insecure origins treated as secure setting

  3. 启用它。

  4. 输入http://cntral.me:3000

  5. 重新启动Chrome。

  6. Voila!

enter image description here

也请参见https://medium.com/@Carmichaelize/enabling-the-microphone-camera-in-chrome-for-local-unsecure-origins-9c90c3149339,以获取良好的演练。

答案 2 :(得分:1)

您可以通过将网络服务器通过隧道传输到手机的本地主机来完全不需要SSL证书。

我使用termux(在电话本身上)运行此命令:

ssh -L 8080:localhost:8080 192.168.0.172

(让ssh会话保持打开状态)

然后在手机上转到http://localhost:8080/

如果您不希望会话超时,则可以使用autossh:

autossh -M 0 -L 8080:localhost:8080 192.168.0.172

重要说明:您的开发机器(或开发服务器)需要通过ssh进行访问。对于Linux,这可以通过安装open-ssh并启用/启动sshd服务来完成。您可以在线查找相关指南。

答案 3 :(得分:0)

我假设您尝试在计算机上托管Web服务,并使用主机名localhost从智能手机访问它。

有两种选择:

首先,如果您的智能手机已植根,则可以更改/etc/hosts,以便将名称localhost解析为192.168.1.4而不是127.0.0.1

其次,如果您可以在计算机上运行SSH服务器,则可以在手机上设置SSH客户端,以将某个端口上的流量转发到另一台计算机上的另一个端口。

例如,在ConnectBot for Android中,您可以

  1. 192.168.1.4
  2. 上为运行SSH服务器的计算机创建配置文件
  3. 长按个人资料,然后选择"编辑端口转发"然后"添加端口转发"来自端口转发菜单
  4. 将其配置为" Local"然后选择可由手机上的非root用户声明的本地源端口(例如,8080),并在底行使用localhost:80(或计算机运行的任何端口) service on)使SSH服务器在端口80上直接转发隧道
  5. 这会导致手机上localhost:8080的所有流量都转到您计算机上的192.168.1.4:80。浏览器不知道localhsot:8080服务实际上只是到192.168.1.4:80的SSH隧道,所以它会像对待任何其他localhost地址一样对待它。