Это совсем не важно
Вот и хорошо.
Проблема - что все объекты только для текущей вкладки создаются.
Это потому, что у тебя там везде используется win.content.document. ... .
Но похоже, что win.content только в e10s вкладке на сам win ссылается.
А в нормальной вкладке ссылается на окно текущей вкладки,
или содержит null, если текущая вкладка электролизисная.
Вот, попробуй понажимать, когда активная вкладка не первая.
var s = loc => loc.href && loc.href.slice(0, 50); var win = gBrowser.visibleTabs[0].linkedBrowser.contentWindow; try {alert([ "win.location: " + s(win.location), "win.content.location: " + s(win.content.location), "win.content == win is " + (win.content == win) ].join("\n"));} catch(ex) {alert(ex);}
И еще вопрос: ни /^(\w+)?:\/\//.test(link), ни !!link.match(/^(\w+)?:\/\//) в коде - упорно не хотят признавать ссылки вида /example.com/, хотя в консоли работает.
Не понял. Где (простой) пример?
Ну и вообще, для этого самого развития: как тут красивее и правильнее сделать?
Ну, понятие о красоте у всех разное. А как тут сделать правильнее я, разумеется, не знаю.
Вот сделал себе кнопку, чтоб посмотреть что там под твой селектор попадает.
Жму, через некоторое время открывается вкладка с результатом, и даже что-то показывает.
Но это же не значит, что сделал правильнее.
(obj => this._handleClick = () => { (obj.gen = obj.gen()).next(); this._handleClick = () => obj.busy ? alert("busy") : obj.gen.next(); })({ get msg() { var msg = `CB${_id.slice(20)}-${Components.stack.lineNumber}:Links`; var code = `${this.getLinks}\nsendAsyncMessage("${msg}", getLinks(content));`; this.url = "data:," + encodeURIComponent(code); delete this.msg; return this.msg = msg; }, busy: false, gen: function*() { while(true) { this.busy = true; var result = [], {gen} = this; for(var win of CustomizableUI.windows) for(var tab of [...win.gBrowser.tabs]) { if (tab.hasAttribute("pending") || ~~"something else") continue; var br = tab.linkedBrowser; if (br.isRemoteBrowser) { var mm = br.messageManager, {msg} = this; mm.addMessageListener(msg, function listener(message) { mm.removeMessageListener(msg, listener); result.push(message.data); gen.next(); }); yield mm.loadFrameScript(this.url, false); } else { result.push(this.getLinks(br.contentWindow)); yield setTimeout(() => gen.next(), 50); } } this.onResult(result); this.busy = false; yield 0; }}, getLinks: function getLinks(win, res) { var doc = win.document; var obj = {title: doc.title, elements: [], frames: []}; for (var elm of doc.querySelectorAll(":-moz-any([href], [src])")) { var node = elm.tagName; for(var v of ["src", "href", "type"]) eval(`var ${v} = elm.${v} || elm.getAttribute("${v}") || elm.${v};`); // ... // ... // ... obj.elements.push({node, src, href, type}); } res ? res.frames.push(obj) : res = obj; for (var ind = 0; ind < win.frames.length; ind++) getLinks(win.frames[ind], obj); return res; }, //---------------------------------------------------------------------------------------------------- onResult(result) { result = this.changeObj(result); var url = "chrome://inspector/content/object.xul"; var pos = gBrowser.selectedTab._tPos; var tab = gBrowser.selectedTab = gBrowser.addTab(url, {forceNotRemote: true}); gBrowser.moveTabTo(tab, pos + 1); tab.linkedBrowser.addEventListener("load", function load(e) { var doc = e.target, {href} = doc.location; if (href == "about:blank") return; else if (href == url) { doc.defaultView.arguments = [result]; doc.title = "== Links =="; doc.querySelector("domi-panel").boxObject.firstChild.style.display = "none"; return; } this.removeEventListener(e.type, load, true); var dwu = doc.defaultView.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); var css = `treechildren::-moz-tree-row {padding-top: 0; padding-bottom: 0; height: 17px; max-height: 17px; min-height: 17px;}`.replace(/;/g, " !important;"); dwu.loadSheetUsingURIString("data:text/css," + encodeURIComponent(css), dwu.AGENT_SHEET); doc.addEventListener("TreeViewChanged", function tvc(e) { doc.removeEventListener(e.type, tvc, false); e.target.body.style.visibility = "visible"; var {view} = e.target, col = e.target.treeBoxObject.columns.colProp; view.selection.toggleSelect(0); for(var ind = 1; ind < view.rowCount; ind++) { view.isContainer(ind) && !view.isContainerEmpty(ind) && !view.isContainerOpen(ind) && view.toggleOpenState(ind); /title/i.test(view.getCellText(ind, col)) && view.selection.rangedSelect(ind, ind, true); } }, false); }, true); }, changeObj: function changeObj(obj) { if (!(obj instanceof Object)) return; if (Array.isArray(obj)) for(var item of obj) changeObj.call(this, item); else if (obj.__proto__.constructor.name == "Object") { Object.defineProperty(obj, "toString", {value: () => "\u25cc"}); // Dotted Circle var map = {title: "aTITLE", elements: "a\u3164ELEMENTS", frames: "a\u3164FRAMES", node: "_node"}; for(var prop in obj) { var val = obj[prop], arr = Array.isArray(val); //if (arr && !val.length) {delete obj[prop]; continue;} if (prop in map) obj[ map[prop] + (arr && val.length ? this.p(val.length) : "") ] = val, delete obj[prop]; changeObj.call(this, val); } } return obj; }, p(num) { var res = ` ${num} штук`; var [last, penult] = [...String(num)].reverse(); if (penult != 1) if (last == 1) res+= "а"; else if ("234".includes(last)) res+= "и" return res; } });
А если хочешь, чтобы я к чему-нибудь придрался, то возьмём что-нибудь попроще.
var sel = document.commandDispatcher.focusedWindow.getSelection(); if (!!sel) return sel.toString().trim();
Правильнее не заниматься двойным отрицанием
объекта Selection, потому что всегда получишь true.
menu.addEventListener('popupshowing', function f() menuitem.hidden = !(gContextMenu.onLink || gContextMenu.isTextSelected)); addDestructor(()=> { menu.removeChild(menuitem); menu.removeEventListener("popupshowing", f) })
Раз уж не хочешь пользоваться предопределённой в Custom Buttons
функцией addEventListener, добавляющей самоудаляющийся листенер,
то правильнее будет определить функцию f как-то иначе, а не как у тебя так,
что её нигде (кроме как внутри самой функции f) не видно.
Отредактировано Dumby (16-09-2016 17:15:11)
Отсутствует
Dumby
Не понял. Где (простой) пример?
Живой не найду, но мне попадались такие ссылки в коде страниц, без указания протокола. Я проверял просто отредактировав в инспекторе на странице. И если в консоли
- true, то при запуске кода получается:
что-нибудь попроще.
Фух, спасибо. А то, то что выше я еще долго буду пытаться понять. '>_>
Правильнее не заниматься двойным отрицанием
объекта Selection, потому что всегда получишь true.
Ум, из-за лени сократил. Правильно будет sel && !!sel.length? Или если сделать
то ведь можно и if (!!sel) оставить?
Раз уж не хочешь пользоваться предопределённой в Custom Buttons
функцией addEventListener, добавляющей самоудаляющийся листенер,
Ммм? А разве самоудаляющийся? Я несколько раз замечал, что после редактирования/удаления кнопки листенер остается. Или я не так готовлю?
то правильнее будет определить функцию f как-то иначе, а не как у тебя так,
что её нигде (кроме как внутри самой функции f) не видно.
Чорд, опять по старым граблям. Новое выучу - старое забуду.
Спасибо тебе еще раз, за терпение к моей тупости. Буду тыкать и думать.
Отредактировано turbot (16-09-2016 18:23:48)
Отсутствует
turbot
проверял просто отредактировав в инспекторе на странице. И если в консоли - true, то при запуске кода получается
Ну-ка понажимай и доложись.
var doc = content.document; if (!(doc instanceof HTMLDocument)) { alert("doc is NOT instanceof HTMLDocument"); return; } var element = doc.createElement("script"); element.setAttribute("src", "://example.com/"); element.setAttribute("id", "turbot-script-777"); doc.head.appendChild(element); var script = doc.getElementById("turbot-script-777"); alert([ "ATTRIBUTE «src» is\n" + script.getAttribute("src"), "PROPERTY «src» is\n" + script.src ].join("\n\n\n")); script.remove();
Правильно будет sel && !!sel.length?
Нет.
Или если сделать
var sel = document.commandDispatcher.focusedWindow.getSelection().toString().trim()
то ведь можно и if (!!sel) оставить?
Почему бы и нет. (см. также). Насчёт необходимости «!!» (Флэнаган).
Я несколько раз замечал, что после редактирования/удаления кнопки листенер остается. Или я не так готовлю?
Не понял. Где (простой) пример?
Отредактировано Dumby (16-09-2016 22:20:18)
Отсутствует
Ну-ка понажимай и доложись.
О как... Понятно. Как все непросто-то...
Почему бы и нет. (см. также). Насчёт необходимости «!!» (Флэнаган).
Ясно, спасибо.
Не понял. Где (простой) пример?
Ну, просто были такие случаи. В консоль еще что-то ругалось на что-то с originalListener.
Отсутствует
Подскажите пожалуйста, можно ли сделать так чтобы когда появляется окно сохранения файла текст из буфера вставлялся автоматически в поле названия, то есть чтобы срабатывало ctrl+V при появлении окна сохранения?
Можно ли как то отследить его открытие?
Отсутствует
Всем привет.
Скажите, пожалуйста, можно сделать кнопку по нажатию которой будет запускаться .js скрипт в дополнении imacros?
Есть скрипт которым пользуюсь очень часто и приходится открывать панель, затем дерево папок, выбирать скрипт и нажимать "воспроизвести". Было б круто если можно было сделать кнопку на панели.
Отсутствует
Всем привет.
Скажите, пожалуйста, можно сделать кнопку по нажатию которой будет запускаться .js скрипт в дополнении imacros?
Есть скрипт которым пользуюсь очень часто и приходится открывать панель, затем дерево папок, выбирать скрипт и нажимать "воспроизвести". Было б круто если можно было сделать кнопку на панели.
Есть кнопка Bookmarks Folder
На такую кнопку можно посадить любую папку закладок, в том числе и с imacrosами. При этом можно сделать, чтоб меню открывалось по наведению курсора.
Навели курсор на кнопку - открылась папка с imacrosами. Остаётся кликнуть на нужный.
Отредактировано difabor (22-09-2016 02:55:05)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
А такое можно сделать - зависаем мышкой над кнопкой, крутим колесико и кнопка подхватывает команды от него?
Хочу к Page Navigation прикрутить эту штуку, для вертикального скроллирования страницы.
Отредактировано fokanik (22-09-2016 05:59:22)
Отсутствует
А такое можно сделать - зависаем мышкой над кнопкой, крутим колесико и кнопка подхватывает команды от него? Хочу к Page Navigation прикрутить эту штуку, для вертикального скроллирования страницы.
В инициализацию:
Отсутствует
В инициализацию:
Работает, но только пока страница обновляется/загружается, а как загрузится - перестает работать.
В панели управления -> свойства мыши -> колесико: вертикальная прокрутка - поставил значение 4 строки и заработало (было 3 строки).
Но оно мотается помногу - получился аналог нажатия кнопки Page Navigation - Вверх/Вниз по странице, а мне нужна коротенькая подмотка - аналог прокрутки страницы колесиком?
Отредактировано fokanik (23-09-2016 13:18:59)
Отсутствует
подскажите пожалуйста,нужен простой пример,как в CB добавить свой код?хочу чтобы: допустим так:
задать иконку кнопки в зависимости от состояния ключа в about:config
user_pref("dom.event.contextmenu.enabled");
если true тогда > icotrue.gif
если false тогда > icofalse.gif
иначе > icodefault.gif
LMB Click (1клик ЛКМ)
выполнить скрипт на текущей странице
javascript:void(document.oncontextmenu=null);
+изменить иконку кнопки на icodefault.gif
RMB Click (1клик ПКМ)
прописать в about:config prefs.js
user_pref("dom.event.contextmenu.enabled", false);
+ изменить иконку кнопки на icofalse.gif
RMB DoubleClick (даблклик правой)
user_pref("dom.event.contextmenu.enabled", true);
+изменить иконку кнопки на icotrue.gif
Никто не знает столько,сколько не знаю Я.
Отсутствует
Но оно мотается помногу - получился аналог нажатия кнопки Page Navigation - Вверх/Вниз по странице, а мне нужна коротенькая подмотка - аналог прокрутки страницы колесиком?
this.onwheel =e=> e.deltaY > 0 ? content.scrollByPages(1) : content.scrollByPages(-1);
Отсутствует
this.onwheel =e=> e.deltaY > 0 ? content.scrollByPages(1) : content.scrollByPages(-1);
Так тоже перепрыгивает сильно, а нажатия кнопок скролл бара можно имитировать - у них маленькая прокрутака:
sbattr = scrollbar-up-top sbattr = scrollbar-down-bottom namespaceURI: XUL sborient = vertical type = decrement xbl:inherits = curpos,maxpos,disabled,sborient=orient
Отсутствует
Так тоже перепрыгивает сильно, а нажатия кнопок скролл бара можно имитировать - у них маленькая прокрутака:
var speed = 14; // скорость прокрутки this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed);
Отсутствует
var speed = 14; // скорость прокрутки
bunda1, спасибо большое, то что нужно! Очень удобная кнопка получилась, тест:
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%3EPage%20Navigation%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%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*/%0A%0Athis.tooltipText%20%3D%20%0A%22Left/Right%20%20%u2015%20%20%u0412%u043D%u0438%u0437/%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%5Cn%22%20+%20%0A%22DLeft%20%20%20%20%u2015%20%20%20%20%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%22%20+%0A%22%u041A%u043E%u043B%u0435%u0441%u0438%u043A%u043E%20%20%20%20%20%u2015%20%20%20%20%20%u041F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0430%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%5Cn%22%20+%0A%22DRight%20%20%20%20%u2015%20%20%20%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%22%3B%0A%0Avar%20speed%20%3D%2075%3B%20//%20%u0441%u043A%u043E%u0440%u043E%u0441%u0442%u044C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u043A%u0438%0Athis.onwheel%20%3De%3D%3E%20e.deltaY%20%3C%200%20%3F%20content.scrollBy%280%2C%20-speed%29%20%3A%20content.scrollBy%280%2C%20speed%29%3B%0A%0Athis.__defineGetter__%28%22scroller%22%2C%20function%28%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20content.document%3B%0A%20%20%20%20var%20root%20%3D%20doc.documentElement%3B%0A%20%20%20%20var%20body%20%3D%20doc.body%20%7C%7C%20root%3B%0A%20%20%20%20return%20body.scrollHeight%20%3E%20root.scrollHeight%20%3F%20body%20%3A%20root%3B%0A%7D%29%3B%0A%0A//%u0412%u043D%u0438%u0437%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.leftclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollByPages%281%29%20%20%20%0A%7D%3B%0A%0A%0A//%u0412%u0432%u0435%u0440%u0445%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%0Athis.rightclick%20%3D%20function%28event%29%20%7B%0A%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20if%28%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%20%7B%0A%09event.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20event.stopPropagation%28%29%3B%0A%20%20%20%20%20%20%20%20content.scrollByPages%28-1%29%3B%0A%20%20%20%20%09%7D%0A%7D%3B%0A%0A//%u0426%u0435%u043D%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u0435%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.rightDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20content.scrollTo%280%2C%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%3B%0A%7D%3B%0A%0A//%u0412%20%u043D%u0430%u0447%u0430%u043B%u043E/%u043A%u043E%u043D%u0435%u0446%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%0Athis.leftDclick%20%3D%20function%28event%29%20%7B%0A%20%20%20%20var%20scroller%20%3D%20this.scroller%3B%0A%20%20%20%20if%28scroller.scrollTop%20%3E%20%28scroller.scrollHeight%20-%20scroller.clientHeight%29/2%29%0A%09%20%20content.scrollTo%28scroller.scrollHeight%2C%20%200%29%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20%20%20content.scrollTo%280%2C%20scroller.scrollHeight%29%3B%0A%7D%3B%0A%0Athis.setAttribute%28%27onclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0Athis.setAttribute%28%27ondblclick%27%2C%20%27custombuttons.gQuot.mHandler%28event%2C%20this%29%27%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%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%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
this.tooltipText = "Left/Right ― Вниз/Вверх по странице\n" + "DLeft ― В начало/конец страницы\n" + "Колесико ― Прокрутка страницы\n" + "DRight ― Центрирование страницы"; var speed = 75; // скорость прокрутки this.onwheel =e=> e.deltaY < 0 ? content.scrollBy(0, -speed) : content.scrollBy(0, speed); this.__defineGetter__("scroller", function() { var doc = content.document; var root = doc.documentElement; var body = doc.body || root; return body.scrollHeight > root.scrollHeight ? body : root; }); //Вниз по странице this.leftclick = function(event) { var scroller = this.scroller; content.scrollByPages(1) }; //Вверх по странице this.rightclick = function(event) { var scroller = this.scroller; if(!event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) { event.preventDefault(); event.stopPropagation(); content.scrollByPages(-1); } }; //Центрирование страницы this.rightDclick = function(event) { var scroller = this.scroller; content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight)/2); }; //В начало/конец страницы this.leftDclick = function(event) { var scroller = this.scroller; if(scroller.scrollTop > (scroller.scrollHeight - scroller.clientHeight)/2) content.scrollTo(scroller.scrollHeight, 0); else content.scrollTo(0, scroller.scrollHeight); }; this.setAttribute('onclick', 'custombuttons.gQuot.mHandler(event, this)'); this.setAttribute('ondblclick', 'custombuttons.gQuot.mHandler(event, this)');
Отсутствует
С какого-то времени перестала работать кнопка, очищающая поле поиска в новых вкладках. Может кто подскажет что нужно в ней исправить?
// Автоматически очистить панель поиска после запуска поиска, от 08.09.2014. .............. var src = "BrowserSearch.searchBar.handleSearchCommand = " + BrowserSearch.searchBar.handleSearchCommand.toString(), res = src.replace("{", '{\nsetTimeout(function(t) t._textbox.value = "", 50, this)'); eval(res); addDestructor(function() eval(src) );
Windows 10 LTSC
Отсутствует
С какого-то времени перестала работать кнопка, очищающая поле поиска в новых вкладках. Может кто подскажет что нужно в ней исправить?
У меня код работает на FF49. Может в строчке:
res = src.replace("{", '{\nsetTimeout(function(t) t._textbox.value = "", 50, this)');
измени 50 на 150 или больше.
Отсутствует
измени 50 на 150 или больше.
Нет, не помогает...
У меня вот эта работает №1017
Это же не то, что мне надо...
Windows 10 LTSC
Отсутствует
А как ты используешь поле поиска?
Ну раньше действие кнопки проверялось просто: я писал в поле ввода поискового запроса пару слов и открывал новую вкладку. Сразу после этого во всех вкладках все поля ввода очищались. Не помню уже с какой версии Мозиллы такой вариант уже не срабатывает.
Windows 10 LTSC
Отсутствует
Как ты запускаешь поиск?
Поиск по-умолчанию - Enter'ом. А остальные - мышкой по иконке.
Windows 10 LTSC
Отсутствует
Как можно отследить событие, когда закрывается выпадающий список подсказок в строке поиска браузера?
Это панель с id = PopupAutoComplete
Я прочитал что есть атрибут onpopuphiding. Но как его использовать для этой задачи, не знаю.
Отсутствует