Здравствуйте.
Существует ли функция для расширения которой можно вытащить все ссылки на активной вкладке?
Что-нибудь вроде:

Выделить код

Код:

var arraylinks = curWindow.document.links;

С этой командой  код вообще не хочет работать... Отлаживаю с помощью расширения Custom Buttons.

Пробовал до этого брать содержимое странички через

Выделить код

Код:

window.getBrowser().contentDocument.body.innerHTML

и обрабатывать регулярным выражением, но на некоторых сайтах часть ссылок игнорировалась.

А разве content.document.links не работает?

homo_nudus пишет

А разве content.document.links не работает?

Работает.

Немного поправлю. Нужно чтобы кроме самой ссылки было и её название.  :rolleyes:

Орец
content.document.links[i].textContent

Спасибо, теперь полный набор :)

А как можно захватить ещё и фреймы на страничке? :whiteflag:

19-11-2008 21:06:31
Т.е. во фреймах тоже ссылки есть, но приведёнными выше способами они не доступны.

Орец пишет

А как можно захватить ещё и фреймы на страничке?

Примерно вот так:

Выделить код

Код:

function parseWin(win) {
	someFunction(win);
	for(var i = 0, len = win.frames.length; i < len; i++)
		parseWin(win.frames[i]);
}
parseWin(content);

Получилось. Правда какая-то сложная конструкция выходит чтобы добраться до названий всех ссылок.
А можно как бы создать документ, вставить в него все фреймы, и там уже просто искать командой

Выделить код

Код:

content.document.links[i].textContent

.
Или так будет менее производительно?

Гм, а что сложного-то?

Выделить код

Код:

var linksArr = [];
function parseLink(link) {
    var href = link.href;
    var text = link.textContent; // Может понадобиться дополнительная обработка для <a ...><img /></a>
    // Делаем что-нибудь с href и text.
    linksArr.push(href + " - " + text);
}
function getLinks(win) {
    var links = win.document.links;
    for(var i = 0, len = links.length; i < len; i++)
        parseLink(links[i]);
}
function parseWin(win) {
    getLinks(win);
    for(var i = 0, len = win.frames.length; i < len; i++)
        parseWin(win.frames[i]);
}
parseWin(content);
alert(linksArr.join("\n"));

Здорово :)
Infocatcher, спасибо.