Как получить массив всех ссылок на сайт в JavaScript - PullRequest
3 голосов
/ 21 февраля 2012

Мне нужен список / коллекция / массив / все ссылки на веб-сайте. В настоящее время я использую window.content.document.links, но это не работает на всех веб-сайтах. (Эти сайты создают пустой массив.) (Пример: dctp.ws) Я предполагаю, что это потому, что эти сайты содержат фреймы. Есть ли способ получить доступ к ссылкам внутри фреймов?

Кроме того, это скрипт FireGestures, поэтому он будет запускаться «внутри браузера». Я не хочу скачивать сайт или что-то в этом роде, поскольку браузер уже скачал и проанализировал его.

Ответы [ 2 ]

5 голосов
/ 21 февраля 2012

Вы можете получить NodeList всех a элементов из документа, используя getElementsByTagName, например:

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

Таким образом, вы сделаете это для основного документа и для всех фреймов в документе. Чтобы получить доступ к фреймам, вы можете использовать псевдомассив window.frames . Каждая запись является window объектом этого кадра, поэтому:

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

Итак, создайте пустой массив, добавьте элементы из самого документа, а затем переберите окна, добавляя ссылки из своих документов.

Я не знаком с FireGestures, поэтому не знаю, применима ли Same Origin Policy к сценариям, которые он запускает.


Обновление : Исходя из вашего комментария ниже, похоже, что скрипты FireGesture подчиняются SOP. Таким образом, вы не сможете получить прямой доступ к содержимому документов из разных источников в сценарии FireGestures.

Возможно, вы сможете что-то сделать, комбинируя FireGestures и GreaseMonkey. GreaseMonkey имеет вызов API, GM_xmlhttpRequest, который обходит SOP & mdash; но обратите внимание, что это будет еще один GET, вы не будете читать копию страницы, которая уже находится в памяти, что, как вы сказали, вы хотели сделать. К сожалению, вполне возможно, что вы не сможете делать то, что вы хотите с FireGestures. Возможно, вам придется полностью написать собственное дополнение (и попросить предоставить ему соответствующие разрешения).

1 голос
/ 21 февраля 2012

Вы можете использовать document.getElementsByTagName('a').

Это именно так и звучит - вы получаете NodeList всех a элементов на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...