【问题标题】:Internet not accessible from ripple emulator纹波模拟器无法访问互联网
【发布时间】:2015-02-25 04:22:43
【问题描述】:

我创建了一个 VS Cordova 项目,需要从 Web 服务下载一些数据,但 Ripple 在 Chrome 内部运行,Chrome 认为该请求“跨域”并阻止它。将涟漪代理选项设置为禁用/本地/远程无效。我可以使用 --web-security-disabled 命令行选项启动另一个 Chrome 实例,将其指向相同的 URL http://localhost:4409/... 并且应用程序在第二个 Chrome 中运行良好。现在我需要找到一种方法,在我通过在 Visual Studio 中按 F5 启动 Chrome 时将 --web-security-disabled 传递给 Chrome。它可能在某个配置文件的某个地方,只需要找到它...

【问题讨论】:

  • 将跨域代理选项设置为禁用对我来说效果很好。我没有更改任何其他设置。您是否尝试过使用 Chrome 开发者工具进行调试。即单击您的浏览器并按 F12。查看网络选项卡,看看当您尝试与网络服务通信时会发生什么。
  • 感谢您的回复。在网络选项卡中,我看到请求发出并返回状态为 200 OK。但是响应正文为空,我在控制台选项卡中看到一个错误“XMLHttpRequest 无法加载 http://.......请求的资源上不存在“Access-Control-Allow-Origin”标头。Origin '因此,null' 不允许访问。”相同的所有波纹代理选项禁用/本地/远程。如果我使用 --disable-web-security 标志启动 Chrome,响应标头看起来相同,但响应主体现在不是空的,并且一切正常。但是如何将该标志从 VS 传递到 Chrome?

标签: cross-domain visual-studio-cordova ripple


【解决方案1】:

如果不查看确切的代码很难知道,但很可能发生了以下几种情况之一:

  1. 您的代码正在绕过 Ripple 中的 CORS 代理
  2. 通过 Ripple 代理会导致 Web 服务器拒绝请求。
  3. 您已在 Chrome 中安装了 Ripple 扩展程序。实际上,您最终可能会运行两个 Ripple,这可能会导致许多意外行为。

要知道发生了什么,请确保 CORS 代理设置为“本地”并检查网络选项卡。对 www.bing.com 的 XHR 调用如下所示:

http://localhost:4400/ripple/xhr_proxy?tinyhippos_apikey=ABC&tinyhippos_rurl=http%3A//www.bing.com

尝试从您的 index.html 页面执行此操作,看看它是否成功通过代理。

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://www.bing.com", true);
    xmlhttp.send();

如果你需要进一步调试或者你想在 Visual Studio 之外使用 Ripple,你可以实际安装 Ripple npm 包并在 Visual Studio 之外使用它。在调试配置中为 Android 构建,然后转到 bld/Debug 文件夹并在命令提示符下执行以下命令:

    npm install -g ripple-emulator
    ripple emulate android --port 12345

将出现一个浏览器窗口。如果它不是您的默认设置,请将其粘贴到 Chrome 中并重试。然后,您可以在命令提示符中查看通过代理的内容。

您还可以使用带有 --web-security-disabled 的 Chrome 开发工具使用相同的方法来调试您的应用。

【讨论】:

  • 我的 http 请求可能有些不标准:它是从设置了沙盒属性的 iframe 中发送的。我目前能够通过 Chrome 的第二个实例来解决它,该实例指向 VisualStudio 创建的 http 服务器 localhost:4409...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多