6

我正在尝试使用 weinre 进行调试,并在 Chrome 中设置了一个简单的测试以确保一切正常。但是,在开发人员工具中,我得到了错误:

"The page at 'https://myhost/...' was loaded over HTTPS, but ran insecure content from 'http://localhost:8080/target/target-script-min.js': this content should also be loaded over HTTPS.

关于调试“Cordova”或“Phonegap”,我已经看到了其他一些答案。我没有使用这些东西,建议的答案似乎不适用于这里。我正在尝试仅调试简单的 HTML/Javascript。

我在 weinre 网页上没有看到任何提及启用 https 支持(它明确提到它不使用 https),而且我对浏览器端没有太多控制(这需要在各种无论如何,在我看来臭名昭著的 android 浏览器对本地调试完全不友好,这实际上是我尝试使用 weinre 进行调试的原因),所以我不知道如何进行。不使用 https 是不可能的,因为页面会传递敏感信息;在 http 上使用 weinre 是可以接受的,因为我通过 ssh 建立隧道连接。

更新:我也尝试过使用 boomarklet 方法:我将书签 URL 添加到 Chrome Mobile,但是当我尝试导航到书签时,它似乎卸载了原始页面:我可以看到建立的连接,但是当我查看资源,我所看到的只是小书签。但是,如果我尝试通过键入书签的名称来运行书签,直到加星标的 javascript 代码出现在自动完成中,它会保留在当前页面上,但客户端页面中不会显示任何目标。我认为这是出于同样的原因,因为我看到小书签引用http://localhost:2000.

4

3 回答 3

8

为了通过浏览器限制,可以使用反向代理从 https 而不是 http 提供 weinre 页面。这在某种程度上是一种蛮力解决方案,但在我的/etc/httpd.conf文件末尾添加以下行足以代理来自服务器的所有页面 weinre 请求:在我的情况下,这些都不会与现有文件或目录冲突。

ProxyPass       /target/  http://localhost:8080/target/
ProxyPassReverse          /target/  http://localhost:8080/target/
ProxyPass       /client/  http://localhost:8080/client/
ProxyPassReverse          /client/  http://localhost:8080/client/
ProxyPass       /weinre/  http://localhost:8080/weinre/
ProxyPassReverse          /weinre/  http://localhost:8080/weinre/
ProxyPass       /interfaces/  http://localhost:8080/interfaces/
ProxyPassReverse          /interfaces/  http://localhost:8080/interfaces/
ProxyPass       /modjewel.js  http://localhost:8080/modjewel.js
ProxyPass       /images/  http://localhost:8080/images/
ProxyPassReverse          /images/  http://localhost:8080/images/
ProxyPass       /ws/  http://localhost:8080/ws/
ProxyPassReverse          /ws/  http://localhost:8080/ws/

还需要定义 window.WeinreServerURL,因为 Weinre 会通过正则表达式http:/来尝试获取服务器的 URL。这将失败,因为服务器是 https,而不是 http。在我的例子中,我将以下形式的语句添加到书签中作为函数中的第一个语句:

window.WeinreServerURL="https://server:port/

有了这个,我可以将浏览器指向https://server:port/client/#anonymous以调出调试页面,并从处于调试状态的页面运行小书签。

于 2013-12-17T17:15:23.017 回答
3

很好的问答,@Michael!我有同样的问题,并按照您的指导来使用我的设置,即 Windows 上的 IIS。我在这里发布这个作为参考,以防其他人遇到同样的问题。

使用 IIS,我使用以下过程来设置反向代理:

  1. 首先,安装 IIS 的应用程序请求路由扩展及其依赖项。这使得设置反向代理变得非常容易。
  2. 我为此创建了一个新网站,以避免与我现有网站的潜在冲突。在 IIS 管理器中,右键单击Sites并选择Add Web Site.... 给它一个名字(例如'weinre')并将它指向一个临时目录。将绑定更改为https,并选择一个未使用的端口,例如 8005。http如果您愿意,也可以添加绑定。
  3. 选择新创建的站点,然后双击该URL Rewrite模块。
  4. 单击Add Rule(s)...右侧面板,然后使用Reverse Proxy模板。
  5. 确保选中该Enable SSL Offloading框,然后输入 weinre 服务器所在的服务器名称/端口(例如“127.0.0.1:8080”)。添加规则,重启网站,大功告成!

现在,要使用它,只需更新目标脚本的路径以指向您在步骤 2 中绑定的端口。而且,正如迈克尔指出的那样,您还需要设置window.WeinreServerURL,因为它无法使用此设置自动检测.

调试愉快!

于 2014-01-28T20:56:59.020 回答
3

您可以在 Heroku 或 Bluemix等 PaaS 上运行 weinre,它们通常提供 https 终止,因此这些应用程序基本上免费获得 https 支持。

您可以在这里尝试我的公共访问 weinre 服务器的 https 版本:https ://weinre.mybluemix.net/

于 2015-04-08T03:22:22.443 回答