Друзья, здравствуйте!
Быть может кому попадался на глаза аддон (или может быть кто-то умеет настраивать iMacros) под существующую задачу.
Итак, задача:
Имеется открытая в ff web-страница.
Требуется: отрыть все ссылки, которые имеются на странице, в новых табах. Т.е. каждая ссылка открывается в новом табе.
Пример кода станицы:
... <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> <p><a href="http://forum.mozilla-russia.org/">Форум Mozilla Россия</a></p> ...
Custom Buttons + вот такой код:
var links = content.document.getElementsByTagName("a"); var hrefs = {}; for(var i = 0; i < links.length; i++) hrefs[links[i].href] = 1; var br = getBrowser(); for(var h in hrefs) br.addTab(h);
Добавлено Wed Mar 26 00:25:15 2008 :
Или Linky (тут, вроде, только на английском)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Custom Buttons + вот такой код:
Выделить кодКод:
var links = content.document.getElementsByTagName("a"); var hrefs = {}; for(var i = 0; i < links.length; i++) hrefs[links[i].href] = 1; var br = getBrowser(); for(var h in hrefs) br.addTab(h);Добавлено Wed Mar 26 00:25:15 2008 :
Или Linky (тут, вроде, только на английском)
Дай Вам Бог здоровья! Большое спасибо!
объясните, плиз, для чего это нужно? все необходимые ссылки на странице я открываю нажатием на колесо мыши, разве это не то же самое? заинтересовало...
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Отсутствует
никто не отвечает а у меня еще вопрос по Linky - не открываются изображения при нажатии кнопки "открыть все изображения"
Отредактировано eLika (05-12-2008 19:47:57)
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Отсутствует
никто не отвечает
да там свои заморочки
не открываются изображения при нажатии кнопки "открыть все изображения"
eLika попробуйте что то из этого:
Thumbs
AutoSlideshow
firefusk
Web Slide Show 1.2.
Отсутствует
объясните, плиз, для чего это нужно? все необходимые ссылки на странице я открываю нажатием на колесо мыши, разве это не то же самое? заинтересовало...
Правильно, я тоже колесом. Но у всех свои задвиги, и некоторые патологически не любят нажимать на колесо. Вот и начинают искать всякие обходы.
"Большинство философов до сих пор придерживается весьма нефилософских воззрений на многие вопросы философии" Эдгар Аллан По
Отсутствует
Vladimir_S, спасибо, теперь могу четко оценить необходимость в такой фиче
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Отсутствует
Z&N, спасибо за ссылки - проанализировала, хотелось бы несколько иного - предложенное Вами оформляет картинки в виде слайдшоу, а мне надо вместо полной прогрузки картинок скопировать их линки да загрузить менеджером закачек. С Linky сражаться устала, есть более простой вариант?
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Отсутствует
а мне надо вместо полной прогрузки картинок скопировать их линки да загрузить менеджером закачек.
eLika а ну тогда например Orbit Downloader делает это прекрасно
Отредактировано Z&N (07-03-2009 01:20:59)
Отсутствует
Custom Buttons + вот такой код:
Выделить кодКод:
var links = content.document.getElementsByTagName("a"); var hrefs = {}; for(var i = 0; i < links.length; i++) hrefs[links[i].href] = 1; var br = getBrowser(); for(var h in hrefs) br.addTab(h);Добавлено Wed Mar 26 00:25:15 2008 :
Или Linky (тут, вроде, только на английском)
Подскажи пожалуйста, как научить этот скрипт открывать не все ссылки, а ссылки по заранее заданому шаблону
Отсутствует
Подскажи пожалуйста, как научить этот скрипт открывать не все ссылки, а ссылки по заранее заданому шаблону
Как-то так:
(function() { var mask = {}; var maskForLinks = {}; var cnf = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] .getService(Components.interfaces.nsIPromptService) .prompt( window, "Открыть все ссылки со страницы", "Только ссылки, содержащие (используйте /regexp/ для поиска с помощью регулярных выражений):", mask, "Фильтр по ссылке", maskForLinks ); if(!cnf) return; mask = mask.value; var allLinks = !mask; maskForLinks = maskForLinks.value; var isRegExp = false; if(/^\/(.+)\/([img]{0,3})$/.test(mask)) { try { mask = new RegExp(RegExp.$1, RegExp.$2); } catch(e) { alert("Некорректное регулярное выражение:\n\n" + e); return; } isRegExp = true; } function check(val) { return isRegExp ? mask.test(val) : val.toLowerCase().indexOf(mask) > -1; } var links = content.document.getElementsByTagName("a"); var hrefs = {}; var lnk, h, txt; for(var i = 0, len = links.length; i < len; i++) { lnk = links[i]; h = lnk.href; txt = lnk.textContent; if(allLinks || check(maskForLinks ? h : txt)) hrefs[h] = 1; } var br = getBrowser(); // Open a new tab as a child of the current tab (Tree Style Tab) if("TreeStyleTabService" in window) TreeStyleTabService.readyToOpenChildTab(br.selectedTab, true); for(var h in hrefs) br.addTab(h); if("TreeStyleTabService" in window) TreeStyleTabService.stopToOpenChildTab(br.selectedTab); })();
Отредактировано Infocatcher (14-03-2009 03:01:55)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Огромнейшее спасибо.
Подскажи еще, как правильно задать маску, а то у меня выходит не совсем правильно, открываются и те ссылки которые не должны открываться.
И как задать маску один раз в скрипте, а не при каждом вызове?
А вообще скрипт СУПЕР. Очень нужный
Еще раз спасибо
Отсутствует
Подскажи еще, как правильно задать маску, а то у меня выходит не совсем правильно, открываются и те ссылки которые не должны открываться.
http://www.google.ru/
Простые фильтры:
Регулярные выражения (более актуально для Firefox, но на английском):
И как задать маску один раз в скрипте, а не при каждом вызове?
(function() { var mask = "..."; // простой фильтр // или регулярное выражение: // var mask = /.../; var maskForLinks = false; // фильтровать по "названию" ссылки var isRegExp = typeof mask != "string"; var allLinks = !mask; function check(val) { return isRegExp ? mask.test(val) : val.toLowerCase().indexOf(mask) > -1; } var links = content.document.getElementsByTagName("a"); var hrefs = {}; var lnk, h, txt; for(var i = 0, len = links.length; i < len; i++) { lnk = links[i]; h = lnk.href; txt = lnk.textContent; if(allLinks || check(maskForLinks ? h : txt)) hrefs[h] = 1; } var br = getBrowser(); // Open a new tab as a child of the current tab (Tree Style Tab) if("TreeStyleTabService" in window) TreeStyleTabService.readyToOpenChildTab(br.selectedTab, true); for(var h in hrefs) br.addTab(h); if("TreeStyleTabService" in window) TreeStyleTabService.stopToOpenChildTab(br.selectedTab); })();
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Возможно ли чтобы вместо открытия в новых вкладках ссылки копировались в буфер обмена???
var br = getBrowser(); // Open a new tab as a child of the current tab (Tree Style Tab) if("TreeStyleTabService" in window) TreeStyleTabService.readyToOpenChildTab(br.selectedTab, true); for(var h in hrefs) br.addTab(h); if("TreeStyleTabService" in window) TreeStyleTabService.stopToOpenChildTab(br.selectedTab);
заменить на
var res = []; for(var h in hrefs) res.push(h); Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) .copyString(res.join("\n"));
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
(function() { var mask = "..."; // простой фильтр // или регулярное выражение: // var mask = /.../; var maskForLinks = false; // фильтровать по "названию" ссылки var isRegExp = typeof mask != "string"; var allLinks = !mask; function check(val) { return isRegExp ? mask.test(val) : val.toLowerCase().indexOf(mask) > -1; } var links = content.document.getElementsByTagName("a"); var hrefs = {}; var lnk, h, txt; for(var i = 0, len = links.length; i < len; i++) { lnk = links[i]; h = lnk.href; txt = lnk.textContent; if(allLinks || check(maskForLinks ? h : txt)) hrefs[h] = 1; } var res = []; for(var h in hrefs) res.push(h); Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) .copyString(res.join("\n"));
Отсутствует
Вопрос следующий, возможно ли сделать так чтобы копировались в буфер не ссылки а какой-либо текст по маске или соответствующий регулярному выражению
Что за текст и где он будет находиться на странице?
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
vanchelo пишетВопрос следующий, возможно ли сделать так чтобы копировались в буфер не ссылки а какой-либо текст по маске или соответствующий регулярному выражению
Что за текст и где он будет находиться на странице?
Любой видимый текст, т.е. например нужно скопировать текст на странице XXXX.
Либо любой текст отвечающий шаблону или по рег. выр. между тегами <html>...</html>
Отсутствует
В общем случае это довольно-таки нетривиально.
Скажем, може быть такой текст:
Или даже
Хотя визуально и там, и там – «abcdefgh».
Опять же, что считать границами текста.
Если проверять только текстовые узлы, то примерно вот так:
var mask = "кар"; // var mask = /кар/i; var check = typeof mask == "string" ? function(s) { return s.toLowerCase().indexOf(mask) != -1; } : function(s) { return mask.test(s); }; var emptyMask = /^\s*$/; var notInTags=["head", "noscript", "option", "script", "style", "title", "textarea"]; var doc = content.document; var res = doc.evaluate( "//text()[not(ancestor::" + notInTags.join(") and not(ancestor::") + ")]", doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null ); var r = []; var node, tc; for(var i = 0; node = res.snapshotItem(i); i++) { tc = node.textContent; if(emptyMask.test(tc)) continue; if(check(tc)) r.push(tc); } r = r.join("\n"); Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) .copyString(r); //alert(r);
Картинки
Карты
P.S. Идея взята из http://userscripts.org/scripts/review/23362.
Добавлено 02-08-2009 20:19:01
P.P.S. С регулярными выражениями есть баг.
Добавлено 02-08-2009 20:29:24
[UPD]
Забыл про фреймы.
С фреймами вот так:
var mask = "кар"; //var mask = /кар/i; var check = typeof mask == "string" ? function(s) { return s.toLowerCase().indexOf(mask) != -1; } : function(s) { return mask.test(s); }; var emptyMask = /^\s*$/; var notInTags=["head", "noscript", "option", "script", "style", "title", "textarea"]; var xPath = "//text()[not(ancestor::" + notInTags.join(") and not(ancestor::") + ")]"; var r = []; function findText(doc) { var res = doc.evaluate(xPath, doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); var node, tc; for(var i = 0; node = res.snapshotItem(i); i++) { tc = node.textContent; if(emptyMask.test(tc)) continue; if(check(tc)) r.push(tc); } } function parseWin(win) { findText(win.document); for(var i = 0, len = win.frames.length; i < len; i++) parseWin(win.frames[i]); } parseWin(content); r = r.join("\n"); Components.classes["@mozilla.org/widget/clipboardhelper;1"] .getService(Components.interfaces.nsIClipboardHelper) .copyString(r); //alert(r);
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Скажите плиз как выдержать синтаксис в скрипте. Вот регулярное выражение (http:\/\/)?([\d\w\-]+(\.[\d\w\-]+)*).edit.\d{7}. для открытия ссылки типа
Отсутствует
Правила форума iMacros for Firefox
Мини FAQ по iMacros for Firefox
на почту, только с интересными предложениями по скриптам (iMacros/iMacros+JS)!
Отсутствует