2012-04-17 68 views
1

我不知道是否有可能,但我想要的是创建一些脚本扫描到不在我的服务器上的网页,并抓住它的源代码,所以我可以使用一些数据,像PERL或Rails脚本,但使用JQuery/Javascript使用jquery(而不是AJAX)跨域请求

这可能吗?

+1

当你说源代码时,你的意思是HTML响应还是实际的服务器端代码?后者是不可能的(除非Web服务器设置为允许它,这将是非常,非常非常罕见的)。 – 2012-04-17 16:32:25

+0

我只需要HTML响应! – steps 2012-04-17 16:33:05

+0

只能在javascript中执行跨站点数据的方式是JSONP,因此除非主机支持它,否则您运气不佳 – scibuff 2012-04-17 16:33:14

回答

3

在一般情况下,不,这是不可能的,因为Same Origin Policy的客户端,它可以防止您的装载和观察不同来源加载的内容的HTML和脚本源。 (你可以,当然,使用JavaScript 服务器上做这个   —的NodeJS,犀牛,以及类似的。)

但是,如果其他域支持Cross-Origin Resource Sharing,而您使用also supports it浏览器,可以让另一端(另一个网站)允许来源(或所有来源)的代码访问它。不过,另一端必须允许。

在这种情况下,您也会听到有关JSON-P的消息,但只允许您从另一端获取数据(而非HTML源等),并要求另一端明确支持它。

所以你可能必须有一个服务器参与。但并不一定表示您的服务器必须是服务器:您可以将YQL用作cross-domain proxy用于某些目的。

+2

YQL解决了我的问题!谢谢! – steps 2012-04-17 16:53:43

+0

@JoãoPauloApolinárioPassos:很划算!很高兴这有帮助。 – 2012-04-17 17:41:40

0

同源策略

的同源策略是什么网页内容的JavaScript代码可以交互清扫安全限制。它通常在网页包含元素或打开其他浏览器窗口时发挥作用。在这种情况下,同源政策管理一个窗口或框架中的JavaScript代码与其他窗口和框架的内容的交互。特别是,脚本只能读取与包含脚本的文档具有相同来源的窗口和文档的属性。

文档的来源被定义为从中加载文档的URL的协议,主机和端口。从不同Web服务器加载的文档具有不同的来源。通过同一主机的不同端口加载的文档具有不同的来源。加载了http:协议的文档与加载了https:协议的文档不同,即使它们来自同一个Web服务器。

重要的是要明白脚本本身的起源与同源策略无关:重要的是嵌入脚本的文档的来源。例如,假设在主机B提供的网页中包含由主机A托管的脚本(使用元素的src属性)。该脚本的来源是主机B,脚本可以完全访问包含它的文档。如果该脚本打开一个新窗口并从主机B加载第二个文档,该脚本还可以完全访问该第二个文档的内容。但是,如果脚本打开第三个窗口并从主机C(甚至主机A的一个主机)加载文档,则同源策略生效并阻止脚本访问此文档。

作者:David Flangan:Javascript; The Definite Guide

0

从你的问题的最纯粹意义上来说,这是可能的,但我感觉你误解了这些技术的工作原理。即使x域请求是可能的,但实际上没有办法让javascript从外部源收集数据,除非在浏览器中使用AJAX。我之所以说答案是肯定的,是因为这些限制只适用于JavaScript在浏览器内执行的情况。例如,如果将javascript与node.js结合使用,则规则完全不同,因为javascript可以创建套接字,并且x域限制不再适用。

也许你应该澄清你的问题,这样可以提供更合适的答案。

+0

谢谢,我从中学到了很多! :) – steps 2012-04-17 16:51:34