【问题标题】:Fetching cross-domain XML file without JSONP or CORS获取没有 JSONP 或 CORS 的跨域 XML 文件
【发布时间】:2014-01-15 16:19:06
【问题描述】:

作为学习 JavaScript 的一部分,我正在创建一个小部件以在我的 Windows 7 桌面上运行。该小部件应该显示叠加在网络摄像头图像上的时间和温度。网络摄像头图像和温度是从单独的远程服务器(可靠且已知安全)中提取的。温度是 XML 文件的一部分,需要解析才能从中获取温度。

这是给我带来问题的代码的 sn-p。

function setTemp(locURL) {
    $.ajax({
        url : locURL,
        success : function(data, textStatus, jqXHR) {
            // repackage plainobject as String and send for parsing
            displayTemp(String(data));
        },
        error : function(jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
}

参数locURL 作为字符串传递,其中包含本地或远程XML 文件的位置。当 XML 文件在本地托管时,没有问题;该小部件完美运行。但是,当我尝试从远程服务器提取 XML 文件时,我遇到了跨域安全问题。

有没有办法从远程服务器获取这个 XML 文件?我没有远程主机的管理员权限,而且他们不提供 JSONP 支持。因此,JSONP 和 CORS 都不是有用的选项。有没有我没想到的简单 HTML 解决方案?

【问题讨论】:

  • 您唯一的其他选择是使用本地服务器端脚本来检索 XML 文件,然后通过 AJAX 获取该本地脚本。
  • 您是否有权访问一个 Web 服务器,您可以在其中托管一个页面来为您下载 xml 文件,并允许 CORS?
  • “有没有我没想到的简单 HTML 解决方案?” 不。您无法在客户端做任何事情来完成这项工作。在服务器端做。
  • 如果我在本地也没有管理员权限怎么办?真的没有办法在图像上加上温度吗?

标签: javascript jquery ajax xml json


【解决方案1】:

不,没有。这就是Same-origin policy 的用途:确保你不能。

您需要将 HTTP 客户端库添加到您自己的服务器,该服务器会下载文件并使其在您控制的域下可用(当然是在请求使用数据的权限之后)。

【讨论】:

  • 不幸的是,我也没有网络服务器甚至这台特定机器的管理员权限。有没有办法完全从客户端做到这一点?没有办法从远程服务器中提取两条数据并仅使用客户端代码将它们组合起来,这似乎很奇怪。
  • 正如我所说,这是设计使然。如果有可能,那么网络上的安全性会更加糟糕,因为黑客可以从任何地方将 JavaScript 注入网页。事实上,他们必须首先破坏服务器。
猜你喜欢
  • 2015-01-24
  • 2011-03-05
  • 2012-08-05
  • 2017-09-17
  • 2011-07-31
  • 2014-08-14
  • 2013-02-28
  • 2013-06-23
相关资源
最近更新 更多