如何使用 JavaScript 获取远程页面的内容?

Posted

技术标签:

【中文标题】如何使用 JavaScript 获取远程页面的内容?【英文标题】:How to get the content of a remote page with JavaScript? 【发布时间】:2010-11-21 05:42:18 【问题描述】:

我有一个来自 不同域 的远程页面的 URL,我必须下载、解析和更新当前页面的 DOM。我找到了使用 new ActiveXObject("Msxml2.XMLHTTP") 执行此操作的示例,但我猜这仅限于 IE,并且使用 new java.net.URL ,但我不想使用Java。有其他选择吗?

【问题讨论】:

您是否控制了其他域? 【参考方案1】:

相同的域策略会得到你。

1) 通过您的服务器代理。浏览器->你的服务器->他们的服务器->你的服务器->浏览器。

2) 使用闪光灯或银光。第 3 方必须授予您访问权限。 javascript 和 flash 之间的桥梁不适用于大量数据,并且存在错误。 Silverlight 不像闪光灯那样无处不在……

3) 使用标签。这真的不安全...仅当 3rd 方内容是有效的 javascript 时才有效。

【讨论】:

在本地运行的小书签会受到同样的限制吗?【参考方案2】:

通过file_get_contents() 的AJAX 加载php 脚本怎么样?这应该适用于不同的域。如果我理解正确。

【讨论】:

这基本上是史蒂夫布鲁尔的建议。但如果可能的话,我宁愿避免使用代理。【参考方案3】:

编写一个为您检索页面内容的服务器端脚本是可行的方法。您可以使用 XMLHttpRequest 对象对该脚本进行 AJAX 调用,该脚本将为您传递所有 html (?)。

不过,我建议不要这样做。我不确切地知道您对其他网站的信任程度多少,但存在相同的来源政策是有原因的。你到底想做什么?通常,有一种解决方法。

【讨论】:

同源策略是安全的做法。其他网站有 API 吗? Google Finance API 不提供获取股票报价的方法,但正如此处***.com/questions/527703/… 所述,有一种获取报价的方法如下:finance.google.com/finance/info?q=GOOG 那么,您想从 Google 财经中检索股票报价吗?它有助于明确你想要达到的目标:-) @JorenB 是的,我正在尝试获取股票报价以及使用此非官方 API 提供的其他一些补充信息 :)【参考方案4】:

我不认为你可以根据同源政策的限制来做到这一点。两个使用 iframe 在两个域之间进行通信,我们也可以使用 JS 代码,但是两个域都需要在其中包含通信代码。子框架可以联系祖父框架(窗口),但不能在这里。

因为你指的是其他一些网址。

唯一的方法是使用您的服务器端代码来访问其他域上的内容。

【讨论】:

【参考方案5】:

只需使用 PHP:

<?php
$url = "http://www.domaintoretrieve.com";

ob_start();
include_once( $url );

$html = ob_get_contents();
ob_end_clean();

?>

$html 包含要根据需要操作的整个页面。

【讨论】:

【参考方案6】:

XMLHTTPRequest 对象在大多数现代浏览器中都很常见,并且是 AJAX Web 应用程序的动力。

【讨论】:

如果他们创建了一个标准,那么 www.datejs.com 他可能仍然可以使用 AJAX...虽然我不推荐它...

以上是关于如何使用 JavaScript 获取远程页面的内容?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过chrome远程调试获取网页资源内容

如何通过JavaScript或者jQuery异步实现获取远程网页源码,例如按下按钮就显示某网站的源

JavaScript-如何元素id获取页面元素对象

javascript 如何获取iframe里面的内容?

如何获取由 JavaScript 使用 cURL 加载的网页内容?

将 iframe 设置为远程内容的内容高度