如何在JavaScript中获取网站上所有链接的数组

时间:2012-02-21 09:22:36

标签: javascript javascript-objects

我需要一个列表/集合/数组/网站上的所有链接。 目前我正在使用window.content.document.links,但这并不适用于所有网站。 (那些网站产生一个空数组。)(例如:dctp.ws)我猜这是因为那些网站包含框架。有没有办法访问框架内的链接?

此外,这是一个FireGestures脚本,因此它将“在浏览器内”运行。我不想下载网站或类似的东西,因为浏览器已经下载并解析了它。

2 个答案:

答案 0 :(得分:5)

您可以使用getElementsByTagName从文档中获取NodeLista元素,如下所示:

var list = document.getElementsByTagName("a");

因此,您可以为主文档以及文档中的所有帧执行此操作。要访问这些框架,您可以使用window.frames pseudo-array。每个条目都是该框架的window对象,因此:

var listInFrame = window.frames[n].document.getElementsByTagName("a");

因此,创建一个空白数组,从文档本身添加元素,然后在窗口中循环添加文档中的链接。

我不熟悉FireGestures,因此我不知道Same Origin Policy是否适用于它运行的脚本。


更新:从下面的评论中,听起来FireGesture脚本 受SOP约束。因此,您将无法在FireGestures脚本中直接访问来自不同来源的文档内容。

您可以将FireGestures和GreaseMonkey结合起来。 GreaseMonkey有一个API调用,GM_xmlhttpRequest,绕过SOP - 但请注意它将是另一个GET,你不会读取已经在内存中的页面的副本,你说你想做。不幸的是,完全有可能你可能无法用FireGestures做你想做的事。您可能必须完全编写自己的加载项(并请求相关权限)。

答案 1 :(得分:1)

您可以使用document.getElementsByTagName('a')

这听起来完全正确 - 您获得了页面上所有a元素的NodeList