Подскажите если мне надо узнать скрыт ли элемент как лучше написать
Выделить кодКод:
getComputedStyle(element, null).display или getComputedStyle(element, null).getPropertyValue('display')
Зависит от цели написания. "Печальное зрелище" (как сказал бы ослик Иа), связанное именно с этим вопросом, находится здесь: http://blogs.msmvps.com/luisabreu/blog/ … -at-first/
И в чем принципиальная разница?
Чаще всего, разницы между "element.attribute" и "element.getValue('attribute')" нет никакой. Хотя встречаются и исключения.
Отсутствует
yup
Спасибо за разъяснение
Отсутствует
turbot
Насчёт кнопки Sidebar Sites.
Правильно ли я понимаю, что «&& link.src» это на тот случай,
если ссылка, а в ней картинка? А если ссылка сделана как-то иначе,
то она будет открываться во вкладке. Типа какая-нибудь такая.
Ну, и чисто для шутки, зацени вариант. Код хамский и зависимый,
но задуман, наверно, более по-перформансу и с уважением
к атрибуту target, если таковой имеется.
((browser, listener, br) => { if (browser) { addEventListener("DOMFrameContentLoaded", listener, true, browser); var getBr = () => browser.contentDocument.querySelector(listener.selector); if ((br = getBr())) br.window = {parent: listener.parent}; addDestructor(() => { if ((br = getBr())) delete br.window; }); }})(SidebarUI.browser, { selector: "browser#web-panels-browser", handleEvent(e) { if (e.target.matches(this.selector) && !("window" in e.target)) e.target.window = {parent: this.parent}; }, get parent() { delete this.parent; var parent = {}; parent.contentAreaClick = eval(`(${ contentAreaClick.toString().replace( 'linkNode.getAttribute("onclick")', "!target && this.shouldLoadInPanelBrowser(linkNode) || $&" ) })`); parent.shouldLoadInPanelBrowser = link => { // Здесь можно что-нибудь проверить Services.console.logStringMessage([ "CB" + _id.slice(20), "LINK:\t" + link, "DOC:\t" + link.ownerDocument.location ].map(item => String(item).slice(0, 200)).join("\n")); return true; } return this.parent = parent; } });
Отредактировано Dumby (13-06-2016 19:11:31)
Отсутствует
Dumby
Правильно ли я понимаю, что «&& link.src» это на тот случай,
Угу. Я подозревал, что с этим проблемы будут.
Правильно ли я понимаю, что при клике по #sidebar'у,
вроде, не требуется исполнять дальнейшую обработку,
если кликнуто ПКМ, СКМ, или ЛКМ с модификаторами?
Что-то затупил. Было не надо. Но я там уже ужас-ужас наваял в попытке восстановить работу контекстной навигации и теперь нужно.
За код спасибо.Поздно заметил. Попытаюсь потом перенести наваянное в него. Если разберусь.
Отсутствует
На 47 перестал работать код №8074. Не посмотришь?
Чем, собственно, расширение не угодило . Может так
({ id: _id + "-torrent-observer", topic: "http-on-examine-response", cd: "Content-Disposition", re: /^\s*attachment/i, find() { var en = Services.obs.enumerateObservers(this.topic); while(en.hasMoreElements()) { var obs = en.getNext().wrappedJSObject; if (obs && obs.id == this.id) return obs; } }, init() { this.wrappedJSObject = this; addDestructor(reason => { if (reason[5] != "e") return; var obs = this.find(); obs && Services.obs.removeObserver(obs, this.topic); }, this); var obs = this.find(); obs || Services.obs.addObserver(this, this.topic, false); }, observe(channel) { try { channel.QueryInterface(Ci.nsIHttpChannel); var disp = channel.getResponseHeader(this.cd); channel.loadFlags & channel.LOAD_DOCUMENT_URI && channel.contentType == "application/x-bittorrent" && this.re.test(disp) && channel.setResponseHeader(this.cd, disp.replace(this.re, "inline"), false); } catch(ex) {} } }).init();
Отсутствует
Здравствуйте. Не работает кнопка должным образом, если нажать на силку то загружается страница на которой сейчас нахожусь.
// Открывать ссылки длинным кликом, от 21.01.2014. .............................................................. (function func() { const time = 500; // время удержания в мс const background = true; // открывать в фоновой вкладке const nextToCurrent = true; // открывать рядом с текущей вкладкой function handleLongPress(e) { window.clearTimeout( func.timer ); setTimeout(function() { try { func.removeListener() } catch(ev) {} }, 0); var lab = XULBrowserWindow.overLink; if ( e.button == 1 || !lab || lab.startsWith("javascript") ) return; if ( e.type == "mousedown" && !e.target.className.startsWith("ui-slider-handle") ) { func.timer = setTimeout(function() { function c(e) { e.preventDefault(); e.stopPropagation() }; addEventListener('click', c, true); func.removeListener = function() { removeEventListener('click', c, true) }; e.button == 0 ? gBrowser.loadOneTab( lab, {relatedToCurrent: nextToCurrent, inBackground: background, referrerURI: makeURI(content.location.href)} ) : gBrowser.loadURI( lab, makeURI(content.location.href) ); }, time ); } else clearTimeout( func.timer ); }; ["mouseup", "mousedown", "dragstart"] .forEach(function(type) { addEventListener(type, handleLongPress, true, gBrowser) }); })();
Отсутствует
Dumby
Можно еще пару тупых вопросов:
Почему у меня там ругается, если сделать вместо for of - [...self.Help.split("\n\n")].forEach, либо for (var item of self.Help.split("\n\n")) Array.push(item)?
И как сделать из params строку(? (не уверен в терминологии)), чтобы не устанавливать с "' + params + '" (т.е., с кавычками)? И вообще, что он мне отдает? Как это правильно назвать?
Можно ли там обойтись без encodeURIComponent?
Подозреваю, что все эти вопросы связаны. Чертовы строки и массивы...
Отсутствует
Можно еще пару тупых вопросов
Конечно можно, но вопросы сформулированы так,
что для меня затруднительно их понять.
Почему у меня там ругается, если сделать вместо for of - [...self.Help.split("\n\n")].forEach
Вроде не должен никто ругаться. А если кто-то ругается,
мол зачем ты уже готовый массив spread operator'ом в новый массив перегоняешь,
то сам знаешь что ему ответить.
И как сделать из params строку
У тебя params это массив образованый из строки методом split,
соединить обратно в строку можно методом join.
Остальное не понял. Но вот, вариант
var menuPopup = appendChild("menupopup", self, {context: ""}); var menugroup = appendChild("menugroup", menuPopup, { orient: "vertical", oncommand: "openPage(event.target);", oncontextmenu: "removePage(event.target);" }); var sep = "\n\n", items = self.Help.split(sep); items.forEach((item, index) => { var [title, url, icon] = item.split("\n"); appendChild("menuitem", menugroup, { tooltiptext: url, class: "menuitem-iconic", label: title || "Untitled", image: icon || "chrome://mozapps/skin/places/defaultFavicon.png" }).index = index; }); menugroup.openPage = ({index}) => openWebPanel(...items[index].split("\n")); menugroup.removePage = ({index}) => items.splice(index, 1) && installButton(items.join(sep)); function installButton(help) { var link = custombuttons.makeButtonLink("edit", _id); var param = custombuttons.cbService.getButtonParameters(link); param = param.wrappedJSObject || param; param.help = help; custombuttons.cbService.installButton(param); } function appendChild(type, parent, attrs) { var node = parent.appendChild(document.createElement(type)); for(var name in attrs) node.setAttribute(name, attrs[name]); return node; } // и так далее ...
Отсутствует
broker пишет: Здравствуйте. Не работает кнопка должным образом, если нажать на силку то загружается страница на которой сейчас нахожусь.Какой у тебя браузер?
[firefox]48:( на 45 все хорошо.
Отредактировано broker (15-06-2016 14:57:10)
Отсутствует
Здравствуйте. Не работает кнопка должным образом, если нажать на силку то загружается страница на которой сейчас нахожусь.
Я сейчас проверил код на Firefox 48 и у меня всё работает. Код никак не может загружать текущую страницу при нажатии на ссылку. Похоже у тебя установлено какое то расширение которое меняет сплывающую подсказку которая появляется при наведении курсора на ссылку:
Эта подсказка должна показывать адрес ссылки, а не текущей страницы, потому что код берёт адрес ссылки от подсказки.
Отсутствует
bunda1
Я как бы не правильно написал саму проблему Проблема в том что если я сейчас на етой странице нажму "Форумы" то у меня грузится новая вкладка "Форумы" и в том числе и та на которой сейчас нахожусь загружается "Форумы". На 45 все те само разширения и кнопки что ина 48 мозилке чет ребята разработчики накрутили
Отредактировано broker (16-06-2016 23:16:10)
Отсутствует
bunda1
Нашел такое обсуждение по кнопке Autocopy+3, но вот исправленную кнопку найти не удалось. По этой ссылке лежит кнопка в которой getBrowserSelection() не исправлено. Подскажите пожалуйста где можно взять исправленную версию.
Отсутствует
gyra
// Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ................................ ({ PREF_ROOT: "Autocopy", PREF_BLINK: "Autocopy.selectingTextBlink", get blinkMenuitem() { delete this.blinkMenuitem; return this.blinkMenuitem = menuPopup.querySelector('[onclick*="' + this.PREF_BLINK + '"]'); }, init: function() { gPrefService.addObserver(this.PREF_ROOT, this, false); addDestructor(() => gPrefService.removeObserver(this.PREF_ROOT, this)); if (!gPrefService.getBoolPref(this.PREF_ROOT)) return; this.blink = gPrefService.getBoolPref(this.PREF_BLINK); this.setAutocopy(true); }, observe: function(subj, topic, data) { if (data == this.PREF_ROOT) this.setAutocopy(gPrefService.getBoolPref(data)); else if (data == this.PREF_BLINK) setTimeout(() => this.blinkMenuitem.setAttribute("checked", this.blink = gPrefService.getBoolPref(data)) , 100); }, setAutocopy: function(set) { var method = set ? addEventListener : removeEventListener; for(var type of ["mousedown", "mouseup"]) method(type, this, false, gBrowser); }, handleEvent: function(e) { if (e.button || e.target instanceof Ci.nsIDOMNSEditableElement) return; var win = e.target.ownerDocument.defaultView; if (win.top != content) return; var sel = win.getSelection().toString(); if (e.type == "mousedown") {this.sel = sel; return;} if (!sel || sel == this.sel) return; goDoCommand("cmd_copy"); if (!this.blink) return; gBrowser.selectedBrowser.blur(); setTimeout(() => gBrowser.selectedBrowser.focus(), 300); } }).init();
Отредактировано turbot (17-06-2016 10:35:49)
Отсутствует
Есть программа-переводчик, лучшая в своём роде - Qtranslate так вот, задумалось мне поженить её с Фоксом, да не абы-как, а самым интересным способом..
Опять же, из экспериментов выяснилось, что из-под Фокса нельзя послать ей клавиатурную комбинацию
У меня это сработало
// See https://gist.github.com/Noitidart/0de3be2442a0295eb386 // vk codes: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx // Double Ctrl [Ctrl-Down, Ctrl-Up, Ctrl-Down, Ctrl-Up] var data = [[0x11, false], [0x11, true], [0x11, false], [0x11, true]]; // Ctrl+Q [Ctrl-Down, Q-Down, Q-Up, Ctrl-Up] //var data = [[0x11, false], [0x51, false], [0x51, true], [0x11, true]]; var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", {}); var KEYBDINPUT = ctypes.StructType("tagKEYBDINPUT", [ {wVk: ctypes.unsigned_short}, {wScan: ctypes.unsigned_short}, {dwFlags: ctypes.unsigned_long}, {time: ctypes.unsigned_long}, {dwExtraInfo: ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long}, {padding0: ctypes.uint8_t.array(8)} ]); var INPUT = ctypes.StructType("tagINPUT", [{type: ctypes.unsigned_long}, {ki: KEYBDINPUT}]); var pInputs = INPUT.array()(data.map(([vkCode, keyup]) => INPUT(1, KEYBDINPUT(vkCode, 0, keyup ? 2 : 0, 0, 0, ctypes.uint8_t.array(8)())) )); var user32 = ctypes.open("user32"); try { var SendInput = user32.declare("SendInput", ctypes.winapi_abi, ctypes.unsigned_int, ctypes.unsigned_int, INPUT.ptr, ctypes.int); SendInput(pInputs.length, pInputs, INPUT.size); } finally { user32.close(); }
Отсутствует
На последней лисе перестал работать этот код:
// закладка в последнюю папку (({panel}, prefName) => { cbu.isPref(prefName, PlacesUtils.unfiledBookmarksFolderId); addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(prefName)); var popupshownFolderId = Services.prefs.getIntPref(prefName); var handler = e => { if (e.target != panel) return; var id = PlacesUtils.bookmarks.getFolderIdForItem(StarUI._itemId); if (e.type == "popupshown") { popupshownFolderId = id; return; } if (StarUI._actionOnHide || popupshownFolderId == id) return; Services.prefs.setIntPref(prefName, id); } for(var type of ["popupshown", "popuphiding"]) addEventListener(type, handler, false, panel); var src = BookmarkingUI.onCommand.toString(); var res = src.replace("e(isBookmarked", `$&, isBookmarked || Services.prefs.getIntPref("${prefName}")`); var func = eval(`(${res})`).bind(BookmarkingUI); addEventListener("command", e => { e.stopPropagation(); func(e); }, true, document.getElementById("bookmarks-menu-button")); })(StarUI, "CB.lastEditBookmarkPanelFolderId");
Как исправить?
Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Отсутствует
KOT040188
(({panel}, prefName, btn) => { var showEditUIIfNotBookmarked = true; if (!btn) return; cbu.isPref(prefName, PlacesUtils.unfiledBookmarksFolderId); addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(prefName)); var popupshownFolderId = Services.prefs.getIntPref(prefName); var handler = e => { if (e.target != panel) return; var id = PlacesUtils.bookmarks.getFolderIdForItem(StarUI._itemId); if (e.type == "popupshown") { popupshownFolderId = id; return; } if (StarUI._actionOnHide || popupshownFolderId == id) return; Services.prefs.setIntPref(prefName, id); } for(var type of ["popupshown", "popuphiding"]) addEventListener(type, handler, false, panel); var src = BookmarkingUI.onCommand.toString(); var res = src.replace("true", `${showEditUIIfNotBookmarked || "isBookmarked"}, isBookmarked || Services.prefs.getIntPref("${prefName}")`); if (!showEditUIIfNotBookmarked) res = res.replace( 'widget.node.removeAttribute("closemenu")', 'isBookmarked ? $& : widget.node.setAttribute("closemenu", "none")' ); var func = eval(`(${res})`).bind(BookmarkingUI); addEventListener("command", e => e.stopPropagation() || func(e), true, btn); })(StarUI, "CB.lastEditBookmarkPanelFolderId", document.getElementById("bookmarks-menu-button"));
Отсутствует
Здравствуйте ! Не работает кнопка Переключить язык интерфейса( Firefox ) (Отредактировано bunda1 (24-10-2013 18:52:48))
Отремонтируйте пожалуйста !
Как ни странно, и эта не работает : Сохранить ярлык страницы на ...( Firefox24+ ) от 09.06.2016
:::: Mozilla/5.0 (Windows NT 6.1; rv:47.0) Gecko/20100101 Firefox/47.0
p.s. Проверил на Firefox 28.0 + 0.0.5.8.1-signed.1-let-fixed = не работает.
Хотя, например, расширение lcwmcfpon легко создаёт ярлыки и на 47.
Отредактировано dimoniam (18-06-2016 15:27:46)
Отсутствует
Dumby
Спасибо, работает. А можно сделать прокрутку к выбранной папке, а то прокрутка всегда вверху, а папка бывает внизу?
Ещё бы это исправить…
Этот код на последней лисе также не работает:
// Открывать библиотеку во вкладке и последнюю активную папку библиотеки, от 08.08.2014. ................................ --------------------------------------------------------------------------- */ (function () { var historyFolderNum = 1; // папка истории которую откроет код var sortHistoryFolder = true; // сортировать папку истории которую откроет код var command; const pn = "CB.lastUsedLibraryFolder"; const library = "chrome://browser/content/places/places.xul"; // Перехватывать открытие библиотеки и открывать её в вкладке рядом с текущей .... function libraryInTab(e) { command = e.target.getAttribute("oncommand"); if ( !/showPlacesOrganizer|DownloadsUI|DownloadsPanel/.test( command ) ) return; if ( /UnfiledBookmarks/.test( command ) && e.type == 'click' ) return; e.stopPropagation(); // закрыть все вкладки библиотеки кроме первой .... var libTab = null; Array.slice( gBrowser.tabs ).forEach(function(tab) { if ( tab.linkedBrowser.currentURI.spec !== library ) return; !libTab ? libTab = tab : gBrowser.removeTab( tab ); }); // переместить или открыть библиотеку рядом с текущей вкладкой .... var selTab = gBrowser.selectedTab; if ( libTab !== selTab ) { if ( libTab && gBrowser.visibleTabs.indexOf( libTab ) == -1 ) TabView.moveTabTo( libTab, TabView._window.GroupItems._activeGroupItem.id ); libTab = libTab || gBrowser.addTab( library ); var pos = selTab._tPos + ( libTab._tPos > selTab._tPos ); gBrowser.moveTabTo( libTab, pos ); gBrowser.selectedTab = libTab; // если уже открытая библиотека была перемещена if ( !libTab.hasAttribute('busy') ) openLastUsedFolder(); } else openLastUsedFolder(); // если библиотека уже в текущей вкладке }; addEventListener("command", libraryInTab, true, window ); addEventListener("click", libraryInTab, true, document.getElementById('appmenuSecondaryPane') ); // Открывать и запоминать последнюю активную папку если библиотека открыта как вкладка .... function openLastUsedFolder( e ) { var win = e ? e.target.defaultView : content.document.defaultView; if ( win.location != library ) return; // получить нужную папку try { var value = cbu.getPrefs( pn ) } catch(e) { value = '' }; if ( /DownloadsUI|DownloadsPanel/.test( command ) ) value = 'place:transition=7&sort=4'; if ( /UnfiledBookmarks/.test( command ) ) value = 'place:folder=UNFILED_BOOKMARKS&excludeItems=1&expandQueries=0'; // закрыть меню большой кнопки и кнопки загрузок setTimeout(function() { try { document.getElementById("appmenu-popup").hidePopup(); document.getElementById("downloadsPanel").hidePopup(); } catch(e) {} }, 10 ); // открыть нужную папку используя рекурсию (function f() { if ( win.location != library ) return; try { if ( /'History'/.test( command ) ) { var doc = win.document; var view = doc.getElementById('placesList').view; if ( view ) view.selection.select( historyFolderNum ); // открыть указанную папку // сортировать папку истории по адресу if ( sortHistoryFolder && view ) { doc.getElementById('viewMenu').open = true; doc.getElementById('viewSort').open = true; doc.getElementById('viewMenu').open = false; doc.getElementById('menucol_placesContentUrl').doCommand(); } } else { win.PlacesOrganizer.location = value; win.PlacesOrganizer._places.focus(); } } catch(e) { setTimeout(function() f(), 0) }; })(); // запоминать последнюю папку при закрытии библиотеки if ( e == undefined ) return; win.addEventListener("unload", function f(e) { win.removeEventListener( e.type, f); var loc = win.PlacesOrganizer.location; /place:folder|place:sort/.test( loc ) && cbu.setPrefs( pn, loc ); }); }; addEventListener("DOMContentLoaded", openLastUsedFolder, false, gBrowser ); })();
Отредактировано KOT040188 (18-06-2016 23:29:23)
Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Отсутствует
Перестала работать кнопка Перезапуск браузера из контекстного меню
Отсутствует