1

我不知道这是否可能,但我想要的是创建一些脚本,扫描到不在我服务器上的网页并获取它的源代码,这样我就可以使用一些数据,如 PERL 或 Rails 脚本,但使用 Jquery/Javascript

那可能吗?

4

4 回答 4

3

在一般情况下,不,由于Same Origin Policy无法从客户端执行,这会阻止您加载和查看从不同来源加载的内容的 HTML 和脚本源。(当然,您可以在服务器上使用 JavaScript 执行此操作 ——NodeJS、Rhino 等。)

但是,如果其他域支持跨域资源共享并且您使用的浏览器也支持它,则可以允许另一端(其他网站)允许来自您的源(或所有源)的代码访问它。不过,另一端必须允许它。

您还将在此上下文中听到有关JSON-P的信息,但这仅允许您从另一端获取数据(不是 HTML 源等),并要求另一端明确支持它。

所以你可能必须有一个服务器参与。但是,它不一定是您的服务器:您可以出于某些目的将YQL用作跨域代理

于 2012-04-17T16:37:13.013 回答
0

不,它不可能从客户端从另一个网页中获取 HTML 代码。除非您能够配置其他服务器。

http://en.wikipedia.org/wiki/Same_origin_policy更多阅读

于 2012-04-17T16:37:12.427 回答
0

同源政策

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

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

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

作者:David Flangan:Javascript;权威指南

于 2012-04-17T16:39:07.283 回答
0

就您的问题而言,是的,这是可能的,但我觉得您误解了这些技术的工作原理。即使 x 域请求是可能的,javascript 也无法从外部源收集数据,除非在浏览器中使用时通过 AJAX。我之所以说答案是肯定的,是因为这些限制仅适用于在浏览器中执行 javascript 时。例如,如果您将 javascript 与说 node.js 结合使用,则规则完全不同,因为 javascript 能够创建套接字并且 x-domain 限制不再适用。

也许您应该澄清您的问题,以便提供更合适的答案。

于 2012-04-17T16:39:17.220 回答