Но, может, стоит такое поведение в описании отметить.
Угу, если не придумается чего – допишу примечание.
А как вызвать console.log() у окна во вкладке?
Ну вот content – и есть окно текущей вкладки. Ну, пока e10s не приземлят...
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Есть ли какой способ проверить, входит ли элемент в HTMLCollection или NodeList?
И еще, как через js узнать, что какой-то элемент является родительским для моего элемента?
Вот допустим, у меня есть див. Он вложен в контейнер, а тот вложен еще в контейнер и т. д.
Я беру некий элемент и хочу знать, мой див является ли его потомком какого угодно уровня?
Отсутствует
является ли его потомком какого угодно уровня?
Node.contains()
Element.matches()
Например для твоего поста
var doc = content.document; var parentID = "p683192"; var candidate1ID = "brdtitle"; var candidate2ID = "message683192"; var parent = doc.getElementById(parentID); var candidate1 = doc.getElementById(candidate1ID); var candidate2 = doc.getElementById(candidate2ID); alert( "Node.contains:\n\n" + "parent.contains(candidate1) is " + parent.contains(candidate1) + "\n" + "parent.contains(candidate2) is " + parent.contains(candidate2) ); var selector1 = "#" + parentID + " #" + candidate2ID; var selector2 = "#navrules #" + candidate2ID; alert( "Element.matches:\n\n" + 'candidate2.mozMatchesSelector("' + selector1 + '") is ' + candidate2.mozMatchesSelector(selector1) + "\n" + 'candidate2.mozMatchesSelector("' + selector2 + '") is ' + candidate2.mozMatchesSelector(selector2) );
Отредактировано Dumby (17-05-2015 18:44:23)
Отсутствует
с нодой не проверял(но наличие куска текста проверяет) n=array.indexOf(elemtnt) // если отсутствует то n=-1
Дело в том, что HTMLCollection и NodeList это не массивы, а массивоподобные объекты и у них отсутствует метод indexOf()
Можно конечно превратить HTMLCollection в массив, но я думал может можно как то обойтись без этого.
Отредактировано hartumov (17-05-2015 19:20:57)
Отсутствует
Дело в том, что HTMLCollection и NodeList это не массивы, а массивоподобные объекты и у них отсутствует метод indexOf()
Можно конечно превратить HTMLCollection в массив, но я думал может можно как то обойтись без этого.
Или для всех браузеров:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Есть довольно старое, но удобное расширение Show Links https://addons.mozilla.org/ru/firefox/a … s/?src=api, результат его работы - вкладка со списком ссылок со страницы, отдельно на CSS, JavaScript, картинки и т.д. Не встречал ли кто кнопки с похожей функциональностью, с возможностью самому добавлять группу, например, с ссылками на файлообменники, или ссылок, в урле которых есть определенный набор символов?
Отсутствует
laprad
ну есть просто кнопка извлекающая все ссылки страницы или из выделенного. Мну иё пользует очень активно для закачки через wget по списку всякой-всячины, картинок, архивов в основном.
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECopy%20links%20-%20%u041F%u0440%u0438%20%u043D%u0430%u0436%u0430%u0442%u0438%u0438%20%u041B%u041A%u041C%20%u043A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0438%u0437%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%2C%20%u0430%20%u0435%u0441%u043B%u0438%20%u043D%u0438%u0447%u0435%u0433%u043E%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043E%2C%20%u0442%u043E%20%u0438%20%u0432%u043E%u043E%u0431%u0449%u0435%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%2C%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%28%u2248%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u044E%20Multi%20Links%29.%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkBJREFUeJydku1Lk1EYxp8/p28F9a36EGESUguliHBIyOYLKM7yZQ3LNF8oZaZirdwsl6JO02nLdG463WaaL1tZGmhqWGYzBCFwzxa/tkccbYw+eODicO7rvq/7Ovc5AiDEovzFD66Ur5KkWYmguPk71tldYnOjDrpXPuT1Izx06yifTiXPmcLAdiFqlwydbYHC5k1yG9eJK1DTtYlC30bXtwLqF+XkuvPJGEvlpjMBo6eT91+DOBaDFLdskVW3SpRAt2Mb+SMDz1cz6d5USfvdGRmTYiX51lQsSy7m1/YFqu0dZBv1ESeSQFJxyJ4tnZYvSjo2cjD7Chja0WDbvY3WXcvHjT9MLQexfghwZ/iJ5PBiRe++gGVym8tVU6jd58kaOUXrWibG9Wxy7IkUTlxAM5orFY9+CtA/F6DNJZLRW8K1RgsVxjUEbdc6yoZlZN1HSDGdpmkpjSJXIs+mnZTZayRn4c4D8wE634roHSLaN34K2n9z6ZYHQXl/AZXBR5nFQ5M9NAtzAhnWk5hnA/TM/OKp08vLdwHa3SKGUHHDsJ/rphIUg2c5nu5CSK/ykqX7SWX/HnVDfsoGxyU3D2wTkl2jU6RlXERn90t8Ud84eWNnqPVe5WiaA6G69TPJ91bQmPYo7fORbDoRmowQhXBhbOzGawXJ6imEntENzqk90p0OyNj1n9j+Mx6TD6Hq3IkkxnaLh0heeG82L5NUOhdFxOscj498ZZV25vAODlDyeP5wM/gXTs9WvG5CvFgYfwFzo6tZMWWyMgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20win%20%3D%20document.commandDispatcher.focusedWindow%2C%20doc%20%3D%20win.document%3B%0Avar%20sel%20%3D%20doc%2C%20winSel%20%3D%20win.getSelection%28%29%3B%0A%0A%09if%28winSel.toString%28%29%29%7B%0A%09%09sel%20%3D%20doc.createElement%28%27div%27%29%3B%0A%09%09sel.appendChild%28winSel.getRangeAt%280%29.cloneContents%28%29%29%3B%0A%09%09%7D%3B%0A%0Avar%20str%20%3D%20%27%27%2C%20links%20%3D%20sel.getElementsByTagName%28%27a%27%29%3B%0A%0A%09for%28var%20i%20%3D%200%2C%20lnk%3B%20lnk%20%3D%20links%5Bi%5D%3B%20i++%29%20%7B%0A%09%09if%28lnk.href%29str%20+%3D%20lnk.href%20+%20%27%5Cr%5Cn%27%0A%09%09%7D%3B%0A%09gClipboard.write%28str%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BCopy%20links%20-%20%u041A%u043E%u043F%u0438%u0440%u0443%u0435%u0442%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0438%u0437%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%2C%20%u0430%20%u0435%u0441%u043B%u0438%20%u043D%u0438%u0447%u0435%u0433%u043E%20%u043D%u0435%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043E%2C%0A%u0442%u043E%20%u0438%20%u0432%u043E%u043E%u0431%u0449%u0435%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%2C%20%u0432%20%u0431%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%28%u2248%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u044E%20Multi%20Links%29.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Код
var win = document.commandDispatcher.focusedWindow, doc = win.document; var sel = doc, winSel = win.getSelection(); if(winSel.toString()){ sel = doc.createElement('div'); sel.appendChild(winSel.getRangeAt(0).cloneContents()); }; var str = '', links = sel.getElementsByTagName('a'); for(var i = 0, lnk; lnk = links[i]; i++) { if(lnk.href)str += lnk.href + '\r\n' }; gClipboard.write(str);
Это стандарт, для ссылок просто. Мну чуть изменил-добавил сдела еще одну кнопку себе для скачки картинок со страниц:
Код
var win = document.commandDispatcher.focusedWindow, doc = win.document; var sel = doc, winSel = win.getSelection(); if(winSel.toString()){ sel = doc.createElement('div'); sel.appendChild(winSel.getRangeAt(0).cloneContents()); }; var str = '', links = sel.getElementsByTagName('img'); for(var i = 0, lnk; lnk = links[i]; i++) { if(lnk.src)str += lnk.src + '\r\n' }; gClipboard.write(str);
Отсутствует
HaGEN
ну есть просто кнопка извлекающая все ссылки страницы или из выделенного. Мну иё пользует очень активно для закачки через wget по списку всякой-всячины, картинок, архивов в основном.
Спасибо. Да, для однотипных элементов типа картинок можно приспособить, это я понял из getAllLinks.js (автор расширения группирует используя код типа var l = content.document.getElementsByTagName("img")), вопрос в том, что мне группировать надо исходя не из "типа" ссылки, а из куска урла этой ссылки, причем, чтобы можно было прописать множество условий (вхождение подстрок letitbit.net или ul.to или... и т.д.)
Сохранять в редактор и удалять лишнее - имхо, это лишнее мне удобней получить ссылки во вкладке, пометить нужные мне с зажатым ctrl или просто мышкой, и работающая кнопка Autocopy занесет все ссылки в буфер, откуда их уже подхватит даунлоадер
Отредактировано laprad (23-05-2015 09:48:46)
Отсутствует
okkamas_knife
поставьте уже DTA там всё это есть
Качать с файлообменников не умеет, в буфер помеченные ссылки скопировать не дает (?!). Всё, говоришь? И не сравнивай плиз кнопочку и расширение с 700-килобайтным установщиком
Отсутствует
Как предотвратить выскакивание контекстного меню при клике ПКМ в адресной строке, строке поиска и инпутах на странице?
Может так
addEventListener("contextmenu", function(e) { if ( (e.view == window && (e.target.id == "urlbar" || e.target.id == "searchbar")) || (e.view.top == content && e.target instanceof HTMLInputElement) ) e.preventDefault(); });
Отсутствует
rbfyec
также как и с кнопкой. смотри примеры работы с мышью там откомментировано.
точно также добавляешь в свой обработчик клика.
Я перепробовал разные способы из сниппетов, ещё до того, как писать сюда. Что-то не работает оно у меня.
Dumby
Ну меня в принципе устраивает предложенный вариант. Только я планировал вернуть контекстное меню через полсекунды.
У меня вся эта музыка запускалась по событию онмаусап. Я сделал так
addEventListener("mouseup", function(e){ if(e.button==2){ addEventListener("contextmenu", function(e) { if ( (e.view == window && (e.target.id == "urlbar" || e.target.id == "searchbar")) || (e.view.top == content && e.target instanceof HTMLInputElement) ) e.preventDefault(); setTimeout(function(){removeEventListener("contextmenu", arguments.callee)} ,500) }); } }, false, document );
Но EventListener не удаляется. Или не знаю, что там. Во всяком случае, контекстное меню не возвращается.
Отсутствует
rbfyec
addEventListener("contextmenu", function onContextMenu(e) { ... setTimeout(function(){removeEventListener("contextmenu", onContextMenu)} ,500) });
А arguments.callee будет указывать на функцию, переданную в setTimeout().
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife
1 вполне себе качает надо лишь настройки осилить
2 тут нет телепатов что хотелки угадывать - не можешь чётко сформулировать освой наконец копипасту - все необходимые кусочки кода для создания есть на форуме с комментариями, кнопка то примитивная.
1. Я был неточен в своем утверждении - сам DTA не умеет качать с файлообменников, генерирующих временную "прямую" ссылку, а таких ФО подавляющее большинство. Вместе с другими расширениями/программами - возможно, умеет. Настроек у него кот наплакал, но если ткнешь носом в настройку, позволяющую скачать, например, этот файл http://turbobit.net/mq56gz4n55tn.html, буду благодарен. У меня качает html-страницу
И всё же - это тема про кнопки
2. Прошу прощения за свое косноязычие. Show links создает список ссылок, например , с этой страницы форума
https://forum.mozilla-russia.org/style/Moz-infinity.css
JavaScript Files
https://forum.mozilla-russia.org/scripts.js?9
https://mc.yandex.ru/resource/watch.js
https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Images
chrome://informenter/skin/marker.png
https://counter.rambler.ru/top100.cnt?648851
https://forum.mozilla-russia.org/img/browsers/firefox.png
https://forum.mozilla-russia.org/img/browsers/palemoon.png
https://forum.mozilla-russia.org/img/browsers/seamonkey.png
https://forum.mozilla-russia.org/style/img/Moz-infinity/pun_Moz-infinity_forum_logo.png
Links
http://mozilla-russia.org/
http://mozutil.mozilla-russia.org/
http://nvu.mozilla-russia.org/
http://pastebin.mozilla-russia.org/
http://planet.mozilla-russia.org/
и т.д.
http://turbobit.net/mq56gz4n55tn.html
https://yadi.sk/d/193Gnglm4Ia5D
http://novafile.com/h359oekrfgqb
CSS Files
https://forum.mozilla-russia.org/style/Moz-infinity.css
JavaScript Files
https://forum.mozilla-russia.org/scripts.js?9
https://mc.yandex.ru/resource/watch.js
https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
Images
chrome://informenter/skin/marker.png
https://counter.rambler.ru/top100.cnt?648851
https://forum.mozilla-russia.org/img/browsers/firefox.png
https://forum.mozilla-russia.org/img/browsers/palemoon.png
https://forum.mozilla-russia.org/img/browsers/seamonkey.png
https://forum.mozilla-russia.org/style/img/Moz-infinity/pun_Moz-infinity_forum_logo.png
Links
http://mozilla-russia.org/
http://mozutil.mozilla-russia.org/
Отсутствует
Нужна помощь. Есть два пункта контекстного меню с id context-openlinkincurrent и context-openlinkintab, хотелось бы повесить действие второго пункта на клик СКМ по первому, т.е. чтобы в итоге было что ЛКМ открывает в текущей вкладке, а СКМ в новой, сразу за текущей. Как это сделать?
Отсутствует
Kamui
addEventListener("click", function(e) { if (e.button == 1) { e.preventDefault(); e.stopPropagation(); gContextMenu.openLinkInTab(); } }, true, document.getElementById("context-openlinkincurrent"));
Только меню будет оставаться открытым после клика скм. Не знаю, как избежать.
Отредактировано turbot (26-05-2015 01:27:11)
Отсутствует
Только меню будет оставаться открытым после клика скм. Не знаю, как избежать.
setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
Отсутствует
bunda1
О, спасибо. А не подскажите заодно, почему так не выходит:
document.getElementById("context-openlinkincurrent").setAttribute('onclick', 'checkForMiddleClick(this, gContextMenu.openLinkInTab())');
? Вернее, работает, но при клике левой открывает и в новой и в текущей.
Отсутствует
turbot
нужен:
и тогда при клике левой не будет открывать.
Отсутствует
bunda1
А, я так и предполагал, но вот куда их впихнуть в таком виде?
document.getElementById("context-openlinkincurrent").setAttribute('onclick', 'event.preventDefault(); checkForMiddleClick(this, gContextMenu.openLinkInTab())');
Отсутствует