Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№1142607-03-2017 21:55:41

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

_zt пишет

Параметр about:config >> browser.tabs.warnOnClose - не помогает?

Не помогает.Стоит false, галка в настройках снята. Всё равно "Вы собираетесь закрыть 6 вкладок. Вы действительно хотите это сделать?"

Отсутствует

 

№1142707-03-2017 22:03:55

mahtanoronra
Участник
 
Группа: Members
Зарегистрирован: 08-03-2009
Сообщений: 63
UA: Firefox 45.0

Re: Custom Buttons

bunda1
ну когда нажимаешь правым кликом мыши в любом месте открытой страници и там что бы был пункт меню "открыть вкладку в.."

Отсутствует

 

№1142807-03-2017 22:22:59

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1644
UA: Firefox 52.0

Re: Custom Buttons

mahtanoronra
Ни чего она там не меняет, кладете туда стиль и по нажатию кнопка включает/отключает его. Например, когда нужно скрыть какую либо панель с кнопками после инициализации всех кнопок. И здесь способ со стилем в Stylish не прокатит, так как стиль отработает до инициализаций кнопок и следовательно все скрытые кнопки не инициализируются. В данном же случае скрытия панели произойти до инициализации кнопок никак не может, так как по любому сначала должна произойти инициализация.

На вкладке, табе, заголовке страницы, есть пункт "открыть вкладку в..".

Duche
Там два параметра, у второго тоже false?
browser.tabs.warnOnCloseOtherTabs
browser.tabs.warnOnClose

Добавлено 07-03-2017 22:27:16
bunda1
Еще один "пациент" нашелся, открывал консоль в окне, поверх всех окон. Можете поправить, если это вообще возможно?

Выделить код

Код:

toOpenWindowByType("global:console", "chrome://global/content/console.xul", "chrome,toolbar,resizable,alwaysRaised");

Отредактировано _zt (07-03-2017 22:27:16)

Отсутствует

 

№1142907-03-2017 22:44:47

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

_zt пишет

bunda1, "Save, от 06.03.2017" не сохраняет в PNG часть страницы, и видимую и выбранную и фрейм, вместо этого сохраняет шапку страницы.

Исправил Save

Добавлено 07-03-2017 22:49:36

_zt пишет

Еще один "пациент" нашелся, открывал консоль в окне, поверх всех окон. Можете поправить, если это вообще возможно?

Выделить код

Код:

toOpenWindowByType("global:console", "chrome://global/content/console.xul", "chrome,toolbar,resizable,alwaysRaised");

Нет старую консоль там уже удалили. Попробуй:

Выделить код

Код:

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%3EBrowser%20Console%20in%20Sidebar-Tab%20-%20For%20Firefox%2048%20or%20higher%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACZklEQVQ4jWXRv08aYRgH8EOCsXWwkTYlhz9Qkzod6hUTUhsdHMU4MLD4DziVf0IToS0c7+FQBc8ekGByqBCSWlO7YVPtmQhLtQmsrwmm9hbPG74dMDRveZLP9H3yDM+X4x7mfSwOWZYhyzJicQncf+PaqoBXdfCqDlfqhM2TySRyuRxKpRJKpRJyuRySyWR7aTBzjrFiA+PHNxg/vsFYsYHBzHkrj0sJZLNZlMtlRiaTQSyewHC6gqGDBka+/mEMHTQwnK6Ak2UZe3t7KBaLjEKhAEII3KoO/qgJ/sst63MTblUHRwiBpmnY399naJr2cOAHnJ+a6D+6ZTgPHw7E4hJ2dnagaRpDURTE4hLc6W9wFuroPfzNcBbq4FOV1h8IIVAUBfl8Hvl8HoqigBDSfiKv6ujT6nCUm3CUm+jT6uBVnW0iLiXaNUoJ0lGjZ7uCAVXHgKrDs33SkXOXqz2gERtoxIar1UcdC6ezc6iJImqiiLPZOTan77phpDy4253G3e40jJQH9F13e6kmCKCiCNPng+nzgYoiaoLQyi/X+2Fs8rB2pxjGBx4/1504fekD9fuB+XkG9fvx3TcNjka7YH4chZV9wTDVUdBoFy68XtwvLABLS4z7QABVrxccjdpgpl2wFDfDTLtAI12oer2wQiFgeZlxHwqhOjEB7tfaYxhyD6ytJwyD9OBqrRenr2ZAFxeBlRUGDQRwNvO69YfrqA2GZIe54YC54YAh2XEdtf17oiiCBoOwwmFY4TBoMIiaKLbyzTcjzzmO4y4jz0Df2kGjdlxFnnbWODmFC0FAVRBwNjnVzv8Cnb4oOBnoKkcAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21%28%22Services%22%20in%20window%29%29%0A%09Cu.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0A%0Avar%20_UID%20%3D%20%22__browser_console_sidebar_tab%22%20+%20self.id.slice%2820%29%3B%0Avar%20PREF_BRANCH%20%3D%20%22CB.BrowserConsoleOnSidebarTabBar.ID%22%20+%20self.id.slice%2820%29%20+%20%22.%22%3B%0Avar%20USE_CSS_PREF%20%3D%20PREF_BRANCH%20+%20%22StyleSheetEnabled%22%3B%0Avar%20STATE_PREF%20%3D%20PREF_BRANCH%20+%20%22State%22%3B%0Avar%20CHECKED_STATE_PREF%20%3D%20PREF_BRANCH%20+%20%22UseCheckedState%22%3B%0Avar%20URL%20%3D%20%22chrome%3A//devtools/content/webconsole/webconsole.xul%22%3B%0Avar%20broadcasterID%20%3D%20%22viewBrowserConsoleSidebar%22%20+%20_UID%3B%0Avar%20isOSX%20%3D%20Services.appinfo.OS.toLowerCase%28%29.startsWith%28%22darwin%22%29%3B%0A%0A//%20Preferences%20initialization%0Acustombuttons.isPref%28USE_CSS_PREF%2C%20true%29%3B%0Acustombuttons.isPref%28STATE_PREF%2C%20false%29%3B%0Acustombuttons.isPref%28CHECKED_STATE_PREF%2C%20false%29%3B%0A%0Aif%20%28%21%28_UID%20in%20window%29%29%20%7B%0A%09window%5B_UID%5D%20%3D%20%7B%0A%09%09%22MainListener%22%3A%20false%2C%0A%09%09%22BroadcasterCreated%22%3A%20false%2C%0A%09%09%22StyleSheet%22%3A%20false%0A%09%7D%3B%0A%7D%0A%0A%28tmp%20%3D%3E%20%7B%0A%09var%20modules%20%3D%20%22resource%3A//gre/modules/%22%3B%0A%09var%20%7B%0A%09%09Promise%0A%09%7D%20%3D%20Cu.import%28modules%20+%20%22Promise.jsm%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09devtools%0A%09%7D%20%3D%20Cu.import%28%22resource%3A//devtools/shared/Loader.jsm%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09DebuggerServer%0A%09%7D%20%3D%20devtools.require%28%22devtools/server/main%22%2C%20tmp%29%3B%0A%09var%20%7B%0A%09%09DebuggerClient%0A%09%7D%20%3D%20devtools.require%28%22devtools/shared/client/main%22%2C%20tmp%29%3B%0A%0A%09var%20hud%20%3D%20devtools.require%28%22devtools/client/webconsole/hudservice%22%29%3B%0A%0A%09var%20link%20%3D%20document.createElementNS%28xhtmlns%2C%20%22link%22%29%3B%0A%09link.setAttribute%28%22rel%22%2C%20%22shortcut%20icon%22%29%3B%0A%09link.setAttribute%28%22href%22%2C%20self.image%29%3B%0A%0A%09function%20connect%28%29%20%7B%0A%09%09var%20deferred%20%3D%20Promise.defer%28%29%3B%0A%09%09if%20%28%21DebuggerServer.initialized%29%20%7B%0A%09%09%09DebuggerServer.init%28%29%3B%0A%09%09%09DebuggerServer.addBrowserActors%28%29%3B%0A%09%09%7D%0A%09%09DebuggerServer.allowChromeProcess%20%3D%20true%3B%0A%0A%09%09var%20client%20%3D%20new%20DebuggerClient%28DebuggerServer.connectPipe%28%29%29%3B%0A%09%09client.connect%28%28%29%20%3D%3E%20%7B%0A%09%09%09client.getProcess%28%29.then%28response%20%3D%3E%20%7B%0A%09%09%09%09deferred.resolve%28%7B%0A%09%09%09%09%09form%3A%20response.form%2C%0A%09%09%09%09%09client%3A%20client%2C%0A%09%09%09%09%09chrome%3A%20false%0A%09%09%09%09%7D%29%3B%0A%09%09%09%7D%2C%20deferred.reject%29%3B%0A%09%09%7D%29%3B%0A%09%09return%20deferred.promise%3B%0A%09%7D%0A%0A%09if%20%28%21window%5B_UID%5D%5B%22MainListener%22%5D%29%20%7B%0A%09%09window%5B_UID%5D%5B%22MainListener%22%5D%20%3D%20true%3B%0A%09%09document.getElementById%28%22browser%22%29.addEventListener%28%22DOMContentLoaded%22%2C%20e%20%3D%3E%20%7B%0A%09%09%09var%20win%20%3D%20e.target.defaultView%2C%0A%09%09%09%09loc%20%3D%20win.location%3B%0A%09%09%09if%20%28%21loc%20%7C%7C%20loc.href%20%21%3D%3D%20URL%29%0A%09%09%09%09return%3B%0A%09%09%09connect%28%29%0A%09%09%09%09.then%28connection%20%3D%3E%20devtools.TargetFactory.forRemoteTab%28connection%29%29%0A%09%09%09%09.then%28target%20%3D%3E%20%7B%0A%09%09%09%09%09hud.openBrowserConsole%28target%2C%20win%2C%20win%29.then%28browserConsole%20%3D%3E%20%7B%0A%09%09%09%09%09%09win.onbeforeunload%20%3D%20e%20%3D%3E%20%7B%0A%09%09%09%09%09%09%09e.returnValue%20%3D%20%22%22%3B%0A%09%09%09%09%09%09%09browserConsole.chromeWindow%20%3D%20%7B%0A%09%09%09%09%09%09%09%09close%3A%20%28%29%20%3D%3E%20%7B%7D%2C%0A%09%09%09%09%09%09%09%09document%3A%20win.document%0A%09%09%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%09%7D%3B%0A%09%09%09%09%09%09var%20root%20%3D%20win.document.documentElement%3B%0A%09%09%09%09%09%09root.setAttribute%28%22title%22%2C%20%22Browser%20Console%22%29%3B%0A%09%09%09%09%09%09root.appendChild%28link.cloneNode%28false%29%29%3B%0A%09%09%09%09%09%7D%2C%20Cu.reportError%29%3B%0A%09%09%09%09%7D%2C%20Cu.reportError%29%3B%0A%09%09%7D%2C%20false%29%3B%0A%09%7D%0A%0A%09self.onclick%20%3D%20function%28aE%29%20%7B%0A%09%09if%20%28aE.button%20%21%3D%3D%202%29%0A%09%09%09aE.preventDefault%28%29%3B%0A%09%09if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20%21aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09toggleSidebar%28broadcasterID%29%3B%0A%09%09%09%7D%20catch%20%28aErr%29%20%7B%0A%09%09%09%09SidebarUI.toggle%28broadcasterID%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%201%20%26%26%20%21aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09var%20tab%20%3D%20gBrowser.visibleTabs.find%28tab%20%3D%3E%20tab.linkedBrowser.currentURI.spec%20%3D%3D%3D%20URL%29%3B%0A%09%09%09gBrowser.selectedTab%20%3D%20tab%20%7C%7C%20gBrowser.addTab%28URL%29%3B%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20%21aE.shiftKey%20%26%26%20accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09custombuttons.setPrefs%28USE_CSS_PREF%2C%20%21custombuttons.getPrefs%28USE_CSS_PREF%29%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09handleCSS%28%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%20else%20if%20%28aE.button%20%3D%3D%3D%200%20%26%26%20aE.shiftKey%20%26%26%20%21accel%28aE%29%20%26%26%20%21aE.altKey%29%20%7B%0A%09%09%09custombuttons.setPrefs%28CHECKED_STATE_PREF%2C%20%21custombuttons.getPrefs%28CHECKED_STATE_PREF%29%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09self.init%28%29%3B%0A%09%09%09%7D%2C%20100%29%3B%0A%09%09%7D%0A%09%09aE.stopPropagation%28%29%3B%0A%09%7D%3B%0A%7D%29%28%7B%7D%29%3B%0A%0Aif%20%28%21window%5B_UID%5D%5B%22BroadcasterCreated%22%5D%29%20%7B%0A%09window%5B_UID%5D%5B%22BroadcasterCreated%22%5D%20%3D%20true%3B%0A%09var%20mainB%20%3D%20document.getElementById%28%22mainBroadcasterSet%22%29%3B%0A%09var%20thisB%20%3D%20document.getElementById%28broadcasterID%29%3B%0A%09if%20%28mainB%20%26%26%20%21thisB%29%20%7B%0A%09%09thisB%20%3D%20document.createElementNS%28xulns%2C%20%22broadcaster%22%29%3B%0A%09%09thisB.setAttribute%28%22id%22%2C%20broadcasterID%29%3B%0A%09%09thisB.setAttribute%28%22cb_id%22%2C%20_UID%29%3B%0A%09%09thisB.setAttribute%28%22autoCheck%22%2C%20false%29%3B%0A%09%09thisB.setAttribute%28%22label%22%2C%20%22Browser%20Console%20in%20Sidebar%22%29%3B%0A%09%09thisB.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%09%09thisB.setAttribute%28%22group%22%2C%20%22sidebar%22%29%3B%0A%09%09thisB.setAttribute%28%22sidebarurl%22%2C%20URL%29%3B%0A%09%09thisB.setAttribute%28%22oncommand%22%2C%20%22SidebarUI.toggle%28this.id%29%3B%22%29%3B%0A%09%09mainB.appendChild%28thisB%29%3B%0A%09%7D%0A%7D%0A%0Aif%20%28custombuttons.getPrefs%28CHECKED_STATE_PREF%29%29%20%7B%0A%09var%20obsEl%20%3D%20document.createElementNS%28xulns%2C%20%22observes%22%29%3B%0A%09obsEl.setAttribute%28%22element%22%2C%20broadcasterID%29%3B%0A%09obsEl.setAttribute%28%22attribute%22%2C%20%22checked%22%29%3B%0A%09self.appendChild%28obsEl%29%3B%0A%7D%20else%20%7B%0A%09let%20obs%20%3D%20self.getElementsByTagName%28%22observes%22%29%5B0%5D%3B%0A%09obs%20%26%26%20obs.parentNode.removeChild%28obs%29%3B%0A%09self.removeAttribute%28%22checked%22%29%3B%0A%7D%0A%0Afunction%20getHelp%28aPlaceholder%29%20%7B%20//%20Get%20specific%20data%2C%20surrounded%20by%20%22placeholders%22%2C%20from%20the%20Help%20tab.%0A%09return%20document.getElementById%28self.id%29.getAttribute%28%22Help%22%29.split%28%22%3C%21--%22%20+%20aPlaceholder%20+%20%22--%3E%22%29%5B1%5D%3B%0A%7D%0A%0A//START//%20Load%20style%20sheets%0Avar%20css%20%3D%20getHelp%28%22StyleSheet%22%29%3B%0A%0Afunction%20styleSheet%28aCSS%2C%20aRemFlag%29%20%7B%0A%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D%0A%09%09.getService%28Ci.nsIStyleSheetService%29%3B%0A%09var%20ios%20%3D%20Cc%5B%22@mozilla.org/network/io-service%3B1%22%5D%0A%09%09.getService%28Ci.nsIIOService%29%3B%0A%09var%20uri%20%3D%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28aCSS%29%2C%20null%2C%20null%29%3B%0A%09if%20%28sss.sheetRegistered%28uri%2C%20sss.USER_SHEET%29%29%0A%09%09sss.unregisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%09if%20%28aRemFlag%29%0A%09%09return%3B%0A%09sss.loadAndRegisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%09window%5B_UID%5D%5B%22StyleSheet%22%5D%20%3D%20aCSS%3B%0A%7D%0A%0Afunction%20deleteCSS%28%29%20%7B%0A%09if%20%28window%5B_UID%5D%5B%22StyleSheet%22%5D%29%20%7B%0A%09%09styleSheet%28window%5B_UID%5D%5B%22StyleSheet%22%5D%2C%20true%29%3B%0A%09%09delete%20window%5B_UID%5D%5B%22StyleSheet%22%5D%3B%0A%09%7D%0A%7D%0A%0Afunction%20handleCSS%28%29%20%7B%0A%09if%20%28custombuttons.getPrefs%28USE_CSS_PREF%29%29%20%7B%0A%09%09if%20%28%21%28window%5B_UID%5D%5B%22StyleSheet%22%5D%29%29%0A%09%09%09styleSheet%28css%29%3B%0A%09%09else%20if%20%28window%5B_UID%5D%5B%22StyleSheet%22%5D%20%21%3D%3D%20css%29%20%7B%0A%09%09%09styleSheet%28window%5B_UID%5D%5B%22StyleSheet%22%5D%2C%20true%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09%09styleSheet%28css%29%3B%0A%09%09%09%7D%2C%20500%29%3B%0A%09%09%7D%0A%09%7D%20else%20%7B%0A%09%09deleteCSS%28%29%3B%0A%09%7D%0A%7D%0A//END//%20Load%20style%20sheets%0A%0AaddDestructor%28function%28aReason%29%20%7B%0A%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%20%7C%7C%20aReason%20%3D%3D%3D%20%22update%22%29%20%7B%0A%09%09deleteCSS%28%29%3B%0A%09%7D%0A%09if%20%28aReason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%09%09%28Services.prefs.getBranch%28PREF_BRANCH%29%29.deleteBranch%28%22%22%29%3B%0A%09%09let%20selfEls%20%3D%20document.getElementsByAttribute%28%22cb_id%22%2C%20_UID%29%3B%0A%09%09Array.prototype.slice.call%28selfEls%29.forEach%28function%28aEl%29%20%7B%20//%20Delete%20all%20elements%20created%20by%20this%20button.%0A%09%09%09aEl%20%26%26%20aEl.parentNode.removeChild%28aEl%29%3B%0A%09%09%7D%29%3B%0A%09%7D%0A%7D%29%3B%0A%0Afunction%20accel%28aE%29%20%7B%0A%09if%20%28aE%29%0A%09%09return%20isOSX%20%3F%20aE.metaKey%20%3A%20aE.ctrlKey%3B%0A%09return%20isOSX%20%3F%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFA%uD835%uDDFA%uD835%uDDEE%uD835%uDDFB%uD835%uDDF1%22%20%3A%20%22%uD835%uDDD6%uD835%uDDFC%uD835%uDDFB%uD835%uDE01%uD835%uDDFF%uD835%uDDFC%uD835%uDDF9%22%3B%0A%7D%0A%0Athis.tooltipText%20%3D%20self.name%20+%20%22%5Cn%5Ct%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Browser%20Console%20On%20Sidebar%20%5Cn%22%20+%0A%09%22%5Ct%uD835%uDDE0%uD835%uDDF6%uD835%uDDF1%uD835%uDDF1%uD835%uDDF9%uD835%uDDF2%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Browser%20Console%20On%20New%20Tab%5Cn%22%20+%0A%09%22%5Ct%22%20+%20accel%28%29%20+%20%22%20+%20%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Toggle%20Style%20Sheet%5Cn%22%20+%0A%09%22%5Ct%uD835%uDDE6%uD835%uDDF5%uD835%uDDF6%uD835%uDDF3%uD835%uDE01%20+%20%uD835%uDDDF%uD835%uDDF2%uD835%uDDF3%uD835%uDE01%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDF6%uD835%uDDF0%uD835%uDDF8%3A%20Toggle%20the%20use%20of%20checked%20state%22%3B%0A%0AhandleCSS%28%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%uD835%uDDDC%uD835%uDDFA%uD835%uDDFD%uD835%uDDFC%uD835%uDDFF%uD835%uDE01%uD835%uDDEE%uD835%uDDFB%uD835%uDE01%20%uD835%uDDFB%uD835%uDDFC%uD835%uDE01%uD835%uDDF2%uD835%uDE00%0A%u26AB%20%uD835%uDDD7%uD835%uDDE2%20%uD835%uDDE1%uD835%uDDE2%uD835%uDDE7%20%uD835%uDDF6%uD835%uDDFB%uD835%uDE00%uD835%uDE01%uD835%uDDEE%uD835%uDDF9%uD835%uDDF9%20%uD835%uDDFA%uD835%uDDFC%uD835%uDDFF%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF5%uD835%uDDEE%uD835%uDDFB%20%uD835%uDDFC%uD835%uDDFB%uD835%uDDF2%20%uD835%uDE03%uD835%uDDF2%uD835%uDDFF%uD835%uDE00%uD835%uDDF6%uD835%uDDFC%uD835%uDDFB%20%uD835%uDDFC%uD835%uDDF3%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF6%uD835%uDE00%20%uD835%uDDEF%uD835%uDE02%uD835%uDE01%uD835%uDE01%uD835%uDDFC%uD835%uDDFB%20%uD835%uDDEE%uD835%uDE01%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF2%20%uD835%uDE00%uD835%uDDEE%uD835%uDDFA%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF6%uD835%uDDFA%uD835%uDDF2%u2757%u2757%u2757%0A%u26AB%20%uD835%uDDD7%uD835%uDDE2%20%uD835%uDDE1%uD835%uDDE2%uD835%uDDE7%20%uD835%uDDF0%uD835%uDDF9%uD835%uDDFC%uD835%uDDFB%uD835%uDDF2%20%uD835%uDE01%uD835%uDDF5%uD835%uDDF6%uD835%uDE00%20%uD835%uDDEF%uD835%uDE02%uD835%uDE01%uD835%uDE01%uD835%uDDFC%uD835%uDDFB%u2757%u2757%u2757%0A%u26AB%20If%20you%20did%20any%20of%20the%20previous%20actions%2C%20delete%20all%20extra%20buttons%20leaving%20only%20one%20version%20of%20%uD835%uDDE0%uD835%uDE02%uD835%uDDF9%uD835%uDE01%uD835%uDDF6%20%uD835%uDDE7%uD835%uDDFF%uD835%uDDEE%uD835%uDDFB%uD835%uDE00%uD835%uDDF9%uD835%uDDEE%uD835%uDE01%uD835%uDDFC%uD835%uDDFF%20and%20restart%20your%20application.%0A%0AInside%20the%20Help%20tab%20of%20this%20button%20you%20will%20find%20the%20style%20sheet%20to%20customize%20the%20console.%0A%0A%5B%2C%5D%0A%3C%21--StyleSheet--%3E%0A@-moz-document%20%20url%28chrome%3A//devtools/content/shared/widgets/VariablesView.xul%29%7B%0A%09%23variables%20%7B%0A%09%09font-family%3A%20%22Noto%20Sans%22%2C%22Open%20Sans%22%2CHelvetica%2CArial%2Csans-serif%20%21important%3B%0A%09%09font-size%3A%2012px%20%21important%3B%0A%09%09font-weight%3A%20600%20%21important%3B%0A%09%7D%0A%7D%0A@-moz-document%20%20url%28chrome%3A//devtools/content/webconsole/webconsole.xul%29%7B%0A%09/*%20Console%20fonts%20*/%0A%09.devtools-monospace%20%7B%0A%09%09font-family%3A%20%22Noto%20Sans%22%2C%22Open%20Sans%22%2CHelvetica%2CArial%2Csans-serif%20%21important%3B%0A%09%09font-size%3A%2010px%20%21important%3B%0A%09%09font-weight%3A%20bold%20%21important%3B%0A%09%7D%0A%09/*%20Console%20fonts%20*/%0A%0A%09/*%20Text%20colors%20*/%0A%09/*%20Text%20color%20for%20light%20theme%20*/%0A%09.theme-light%20.message-body-wrapper.message-body.devtools-monospace%20%7B%0A%09%09color%3A%20%23000%20%21important%3B%0A%09%7D%0A%09/*%20Text%20color%20for%20dark%20theme%20*/%0A%09.theme-dark%20.message-body-wrapper.message-body.devtools-monospace%20%7B%0A%09%09color%3A%20%23FFF%20%21important%3B%0A%09%7D%0A%09/*%20Text%20colors%20*/%0A%0A%09/*%20Message%20colors%20*/%0A%09.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%20%7B%0A%09%09background%3A%20rgba%28251%2C%20149%2C%200%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%20%7B%0A%09%09background%3A%20rgba%280%2C%20182%2C%20240%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%20%7B%0A%09%09background%3A%20rgba%28255%2C%200%2C%200%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09.message.cm-s-mozilla%5Bcategory%3D%22console%22%5D%20%7B%0A%09%09background%3A%20rgba%28203%2C%20203%2C%20203%2C%20.2%29%20%21important%3B%0A%09%09border-bottom%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%09border-top%3A%201px%20solid%20rgba%280%2C%200%2C%200%2C%20.5%29%20%21important%3B%0A%09%7D%0A%09/*%20Message%20colors%20*/%0A%0A%09/*%20Message%20colors%20on%20hover%20*/%0A%09.theme-light%20.message%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%3Ahover%2C%0A%09.theme-light%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%3Ahover%20%7B%0A%09%09background-color%3A%20rgba%2876%2C%20158%2C%20217%2C%200.23%29%20%21important%3B%0A%09%7D%0A%09.theme-dark%20.message%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22jswarn%22%5D%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22cssparser%22%5D%5Bseverity%3D%22warn%22%5D%5Bfilter%3D%22cssparser%22%5D%3Ahover%2C%0A%09.theme-dark%20.message%5Bcategory%3D%22exception%22%5D%5Bseverity%3D%22error%22%5D%5Bfilter%3D%22exception%22%5D%3Ahover%20%7B%0A%09%09background-color%3A%20rgba%2829%2C%2079%2C%20115%2C%200.5%29%20%21important%3B%0A%09%7D%0A%09/*%20Message%20colors%20on%20hover%20*/%0A%0A%09/*%20Hide%20original%20icons%20*/%0A%09.message%20%3E%20.icon%3A%3Abefore%20%7B%0A%09%09background-image%3A%20none%20%21important%3B%0A%09%7D%0A%09/*%20Hide%20original%20icons%20*/%0A%0A%09/*%20Assign%20new%20icons%20*/%0A%09.message%5Bseverity%3Derror%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAB00lEQVQokX3DTUhTAQDA8Xd9uMNruIeryWQsNgidiL1DCJ0Glk4YeQyhkzpo4E5qt4EQWRKIh6FEhAWaeDBBnB2ch2hzG4rS2kD21Qdvz33Ipm87/Tt2KX/wE048Dv93b5+WGe0nM3r3P/tJe/u0E4/DLxx7XNr5+CC1yQfXPh8f5Njj0oSY24nq7UUd6aY0MYS2tkw1dkA1doC2tkxpYgh1pBvV20vM7UTYH7BTHHahLs2h1+tUUikuy2Uuy2UqqRR6vY66NEdx2MX+gB1hR+kiNzVGq6zRurgg7vOR9PtJ+v3EfT6atRqtskZuaowdpQths8dCfiHIVaNBU9dRo1G2rVa2rVbUaJSmrnPVaJBfCLLZY0FYdZpJTD5GKxaolkocBgLsKgq7isJhIEC1VEL7+YPk0yesOs0IKzaZiOLgy6vn/M7lOA2FKMTjFBIJTkMhfp2d8XXpNRHFyYpNRli0GInYO/jsuk0+myWbTpM5OuJbLErk7Rs2HnkI37ERsXewaDEizMsS4c529h662Xv5gg/37/HObOT9TSNbt9oJd/49L0sIQclQWTdJbMgSH00SW/INPv3jukkiKBkqwowoTs+2idVnBpHrzraJ1RlRnP4DeQFoOf9yusQAAAAASUVORK5CYII%3D%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09.message%5Bseverity%3Dwarn%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABz0lEQVQokX3JT0hTcQDA8XfVLl6WULmLeBA65EkPFrtKB5VCoZPSRUKmIYgXL5FgoU3EuZi4GnrRdXAFy2geGpNcD4Q20bnc5rZnOl/bfPvz/O0x+HYQugQePocvXym21m1NbPSrxx+fcJ3ERr8aW+u2StH1XrW0PcJl6Pm1StsjHK73qtLeShflrT7K/keUg8NcRD+gKTKaInNx4KEcHL56W33srXQh7S5ZKG32UAw7EELHqFYpZmSKGRnDMBBCpxh2UNrsYXfJgrSz0EEhMIZRyVGr1agZVeLuTuLuB1ddq2FUchQCY+wsdCAFZtooyDZ0vYwQgku9zNH7TuLu+wghEEKg6xUK8hyBmTYk/1QryU/P+HOWQdM0NE0jr0TIK5F/ncuekPJZ8U+1Ivkmm0m62gl/nuU8m0VVz0kH50kH51FVlezZbyJfF0m62vFNNiN5x5s4dbaQdN4jnUpynIhxdPCTWOQHoS9uAo7HxN/e5dTZgne8Cckz2ohiNxNzPyTkneXbGwvfX9xCfnmbX7Y7KHYzJ3Yzit2MZ7QRaXWoIb8/beLwtYnoKxMp203Sc//bnzaxOtSQl5YH6iZcg/WFd09vcB3XYH1heaBu4i9fuaqY22u7CwAAAABJRU5ErkJggg%3D%3D%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09.message%5Bseverity%3Dinfo%5D%20%3E%20.icon%20%7B%0A%09%09background-image%3A%20url%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAABxUlEQVQokX3HzUuacQDA8ed/KOjQwdYiIghGg7r0hmyHeWknD9U8xJgYSwITHUIbLIjNdKBQB3HE415C2YvKCiMQbDZyF0dM0LmaU1b2i+Khcg8Pwnc3LwMPn8NHcu8MWX17erHy9TbN+Pb0wr0zZJW8qRERPpjk3e97TZgIH0ziTY0IaWl7kGBeTyA/ynpxgkxFpih2KYpdMhWZ9eIEgfwowbyepe1BpIV4P6v7YyRLXlS1hqZplEWBsiigaRqqWiNZ8rK6P8ZCvB/JEekjnJvh4u8p9Xqder3OVvYliWyw8Qv1lHBuBkekD2ku1Eui8Jyr2iWqqqKqKp6YCU/M1PhV7ZKtH27mQr1IlkA3wbSZo5MyiqKgKAp2eRi7PNz4saiw9uUhlkA30rS/k8ebA0RSHqonVYQQfEj7eZ/2IYTgqPqHj59XeLI5wLS/E2lqWYdzowdX/Ca/Sof8PCyQy38j+z1DLBni6Rsjj6I3cG70MLWsQzIutmOLdvHs013eJl7gWLvF/UAHD4LXsIavY4t2NRgX25HGXW1nZlmH5bUOyysds+EOZiP/M8s6xl1tZ5LB1uK8M996brC30tR867nB1uL8B0UajjUem+zaAAAAAElFTkSuQmCC%22%29%20%21important%3B%0A%09%09background-repeat%3A%20no-repeat%20%21important%3B%0A%09%7D%0A%09/*%20Assign%20new%20icons%20*/%0A%0A%09/*%20Reposition%20new%20icons%20*/%0A%09.message%20%3E%20.icon%20%7B%0A%09%09margin%3A%204px%200%200%204px%20%21important%3B%0A%09%7D%0A%09/*%20Reposition%20new%20icons%20*/%0A%7D%0A%0A/*%20Style%20for%20Browser%20Console%20On%20Tab%20*/%0A.tabbrowser-tab%5Btitle%3D%22Browser%20Console%22%5D%20.tab-icon-image%20%7B%0A%09list-style-image%3Aurl%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVQ4jZXKT0iTcRzH8d8tM8VtOttWj7OpTGcsJBBBCCwU/9IfOkR1EA0ED1GHDsaEIjx4ETsJghaElGaDnP0RO0QmmVo+h8fU2CR0a3smLXsYjMEz3h2kwS6hhxd8v3zeQmlx1q22ur6utlRyIK2ur0qLs07Iza6V7c56tN4O4vdu7IvW28F2Zz1ys2tFLDWUE+tq4tflKn5dOrU/l6uIdTWx1FCOmKsrI3LeTaTtJJG2k0TbzxIdH2bnyyd2wyF2wyF2vnwiOj5MtP1suoucdzNXV4aYrS1hu9HFdqOL8MP7JOJxkskkcVUlmUxm3Il4nPDD++l+trYE4asuZvOck6Cnm5Suk0ql2BgYYNpuRwsE0AIBpu12NgYGSKVSpHSdoKebzXNOfNXFiMkqiY0zpfxcmEPXdXRd54/fz7TdnuGP35/efy7MsXGmlMkqCTFWaUOpcfA7EiaRSKQFZ2aYEIIJIQjOzGRsu2oEpcbBWKUNMeK0sHLajuydQNM0NE1DVRSmJCmDqijpXXk7zcppOyNOC2LIUciiW+LVlTZ2IhFisRhyXx9TkkRIlgnJMlOShNzXRywWYyeq4rt6gUW3xJCjEDFYlM98hY0P5TbGLjYT2tpCVVVC37+jqmrGveX3M95xnQ/lNuYrbAwW5SP6rUbel1j2VBbzIxAgGAzybWmRteVlVj8v8HHiGV5PD6MVJ3jnsKT7fqsR8cCcx2yRmdkiM+/brzHvfcHT2zd5dNzMqNXEY5uJ58fyeSOZ090/D8x5CI8xB5/VxGuribGjBp4UGpiy7P3/47Oa8BhzEHdzj6wNGnLxFhh4uU/eAgODhlzu5h5ZEz3Zh1rvHM5av5WdxUHcOZy13pN9qPUv/viAZlYRB0kAAAAASUVORK5CYII%3D%22%29%21important%3B%0A%09-moz-image-region%3A%20auto%20%21important%3B%0A%7D%0A/*%20Style%20for%20Browser%20Console%20On%20Tab%20*/%0A%0A/*%20Remove%20maximum/minimum%20%20width%20restriction%20of%20sidebar%20*/%0A%23sidebar%20%7B%0A%09max-width%3A%20none%20%21important%3B%0A%09min-width%3A%200px%20%21important%3B%0A%7D%0A/*%20Remove%20maximum/minimum%20%20width%20restriction%20of%20sidebar%20*/%0A%3C%21--StyleSheet--%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отредактировано bunda1 (07-03-2017 22:49:36)

Отсутствует

 

№1143008-03-2017 10:44:05

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1644
UA: Firefox 52.0

Re: Custom Buttons

bunda1
Это, по понятным причинам, не то. Ближе всего к тому что я хотел:

Выделить код

Код:

toOpenWindowByType("global:console", "chrome://devtools/content/webconsole/webconsole.xul", "chrome,toolbar,resizable,alwaysRaised");

Открывается в отдельном окне в режиме поверх всех окон. Строку "chrome://devtools/..." взял из вашей кнопки.

Исправил Save

Вы забыли вставить добавленный ранее код "Сохранить страницу в html одним файлом". А PNG да, работает теперь.

Вот готовая,если что

Выделить код

Код:

// Save, от 08.03.2017. .............

self.label = "Save";
self._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
self.image = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAADAgBEDRIXnwxQjKQNWp6pDFWXqAxXm6gMV5moDFeaqAxXmqgMV5qoDFebqAxVlqgNW5+pCkyIogwSFqgDAgBHDQoFhyszOv8hheP+IJH7/x+L8v8fjfb/H433/x+N9v8fjfb/H432/x+N9/8fi/L/IJH7/yGF5P0kLTTvDAcDgwgICIQ8Ojf/0czA+Oji1fzh18r85NzO/OTbz/zj287849vO/OPbzvzk3M/84dfK++ji1f3Sy8D5NDIvywYGB3kKCgqFQ0A8/+XXw/v979f/9uTO//rp0f/66NH/+ujR//rn0f/66NH/+ujR//bkzv/979f/5tfD/UZBPv8KCwqEDQwMhUVDQP/f08X7+OrZ/+zf0P/v5NP/8OPT/+/j0//v4tP/8OPT/+/j0//s39D/+OrZ/+DTxfxEQj//DAwMhA8PD4VKR0T/4dXG+/rr2v/v4tH/9OXU//Ll1P/z5dT/8+XU//Pl1P/05NT/7+DR//rr2v/i1cX7SkhE/w8PD4USEhKFT0xI/+XXxfv97tr/9ePR//no1P/459T/+OfU//jn1P/459T/+OfU//Xk0f/97tr/5dfF+09MSf8SEhGFFRQUhVNQTv/j2cv7+u/g//Hm2P/169v/9Orb//Tq2//06tv/9erb//br3P/x5tf/+e/g/+PZzPtTUU7/FBQUhRgXF4VXU1D/2828+/Lk0f/q2sf/7d3K/+3dyv/t3cr/7N3K/+rayP/r28n/69vI//Ll0v/azbv7VlNP/xgXF4UfHh6FTktJ/1JOTPtZVFL/Uk5L/1FNSv9RTUr/UU1K/1JPTP9YVVD/VVJP/09NSv9WUk//UU1L+05LSf8fHh2FIR8fhVVTUP9FQkD7UlBM/6Wlj/+4uJ7/sLCX/7S0mv+xsJn/oKCQ/6+vmv+hoYv/TEtH/0NCQPtVUk//IR8fhSMhIIVcWVb/SEVF+19dVv/f3sP////e//X10v///93/2di8/1lYWP+eno//5+fG/19dV/9JRkb7W1hV/yMhIYUkJCOFXltZ/0tJSPtdW1f/0NC4/+/u1P/h4cj/8PDV/7++q/8vLC7/e3lw/9fWv/9eXVf/TElJ+15bWf8lJCKEJSQjhF9cWf9LSUf5XVtX/tbVwf/5+OL/6enV//j54v/GxrX/QD0+/42Kgv/d3cr/YF5a/k5LSvlhXlv/JSUjhCkoKIZpZWT/VVJR/WNhXP/V1cT//f3s/+3t3v/8/Or/zc2//01LSf+VlIz/4eDS/2hmYv9YVVT8aWVj/ycmJoIaGRlYSEVE1DYzM8NKSUfP0dHG9/X16P/n59v+7e3g/+jo3f/X2M3+6uve/9bWzPdOTUvNOjg3y0RBQLwPDw8lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==";


var pref = "CB.Shortcuts.pathToSaveShortcuts";
var faviconFolder = "C:\\Documents and Settings\\Favicon\\";   // папка для сохранения иконок для ярлыков и ярлыков сайтов
var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);


// Создать меню для кнопки .............
var array = [
   { label: "Сохранить страницу в html одним файлом", func: "runSaveSnapshotToHtml()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaUlEQVR4AX3BTWvcVRTA4d+592am/5lp0qSxtEtRxI0oVmipuBFEEDfd1IUvCz+RO3du/QAqCgUjxULdWKFV8AUkapg0pplM5uX/cu85x7RQlDb4PPL62++8ubq68cLZjXPnY2hnKYk4JxMgZ/fpvHe6bo72tr745OO0trb+4pVLb1x7/92rFzfXIQr/a1kbX34T2Lrx2d350Uefpq4znc6y/b0Ho8oZVII5J4oC81qZTAL1YhmAXnK12LUqB1O40Br9fkQLT3DAIjQNLBsw1wBIKmahbkucTKFtjdxFioI7T4gRcnG0tJgVASSVUmKXS6hrJXeQC+QC5iD8h0NaAS2Cu6FFAxCCqkZVDWYKIjwiPEZ4SBzMCmo5AJJULWIau7ZlZ6zMZhV1q5g5j0sxcP+gpl4qZhqAmLTkBBbNnZvfjTk8zBxMWprWcAd3HhJxhoNEVSWGowsE0QBI6nIOajnEFEkp8Orl8wxHQ4QCKCJOjByL/PLbnB/u7DIYRFRLAELKucSmzuHPnTmT/TFX33qK61vbLGp479qzbG70eGR9NXHj258Yjc7h5gEIIecS6yaHxaJlWS9ZLjPf3x5z89Yuh9PMA/cnsLsPh9NMFMetYFYCEII7vRh7vapaReQUm2d6fPjBZV678hxrp3s80O9DFJBwin5/QFWtEWMvATGpFp8e3bOd8W0O9u/w1deZiy8/zysvLfj19xk//mzMF4W2c7b/2NPtv+52Kk11eHSPYyKD1bOXzMozpbRPSwjkpgiChJWAZ8UViBwTQSSnldjgVsXUm5Wm+Vz41xDoAwIETuaAAy3QAf4PtuhVEPpvXZEAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAAElFTkSuQmCC"},  
   { separator: ''},
   { label: "Сохранить значок веб-сайта", func: "saveFavicon()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg=="},
   { label: "Запомнить значок веб-сайта как base64", func: "copyFaviconData()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ=="},  
   { separator: ''},
   { label: "Сохранить ярлык страницы как…", func: "saveShortcuts('true')", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="},
   { label: "Сохранить ярлык страницы без запроса на сохранение", func: "saveShortcuts()", image: false},
   { separator: ''},
   { label: "Сохранить всю страницу как PNG", func: "WebScreenShot.captureAll()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить видимую часть страницы как PNG", func: "WebScreenShot.capturePage()", image: false},
   { label: "Сохранить выбранный элемент страницы как PNG", func: "WebScreenShotByClick.init()", image: "data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Сохранить выбранную область страницы как PNG", func: "WebScreenShotByClipping.init()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Сохранить всю страницу как PDF", func: "savePageToPDF()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUw4pJt3V/+Rb1D8lnFP/55zTf+VcVH/lXJS/5VyUv+VclL/lXJS/5VyUv+VclL/k3BR/J56Wv9cRzSkAAAAAJNvUKTto2L/4ppe/uehZf/Pmmr/noZv/9Scav/Wl17/1plh/9eZYf/XmWH/15lh/9eZYf/WmGD/2Jlg/suRXP9mRiuk8rWA/397dP1akKn/rqqi/3LF3f8Mntj/4dLJ///+9f/48u3/9e7n//bt5v/47+f/+O/n//jv5//rvZP/1ZJX/a9/VP9+lrD8AIvz/xOt+f8Douv/ALb6/wC28/9tmar/z8jJ//Lq5/////7//v////n9///6/P3//////+Ta0P/PjVP/pnpT/IWds/+aiXj/5efl/8Px//951/3/LMz//wCx8/8GltL/NIu3/4ycqf/l29L////+//n6+//8/v//3tXM/8+OVP+oe1P/6K57/86QWP/r6Ob////////++v/r9/z/oOb9/zDL//8Arf//AI/r/ydysv+hpqr//PTr///////d1Mz/0I5U/6h7U//osH//wo5g/+fm5P/7/f//9vf5//z7+////vv/9/r8/5Dc/P8Oqv7/AJf//wF02v9ffZ7/8Ojh/+Ha1P/NjFL/qHtT/+ewf//Ej1//7O3r///////+/v7//v7+//f5+v/6+vv////8/8Tq/f8hp/7/AJH//wB18/8/bqj/1MGu/9mXXv+leVH/569+/8iSYv+/tKn/wLew/8O5sf/P0M////////7+/v/3+fv////7/9Hv/v8hoP3/AIn//wB4/v84ZqL/w4NH/619VP/nsYD/x45c/9W5of/bv6j/0Jxt/6J/YP+spqD/2N3i//7////6+/3///76/8vr/v8Slv7/AIb+/wBz//83VH7/nW1B/+ewfv/Fjl7/7Ozr///////9+/r/9d7K/9Ghdv+jd1D/pJ6Y/+jt8f/9///////7/6fb/v8Ahv7/AYD//wRp6f95YlT/57B//8SOXv/n5uT//v7///r7/P/8/v////////XRsv/DhEv/loBu/9DX3P/9/v/////7/2O6/f8Afv//FnTU/5JtTf/nsH//xY9e/+jn5f/+/f//+fj5//n4+P/5+Pn/+/////Xbxf/Wj1D/nX1h/+Ll6P////7/3+/3/w+V//8tcbP/qHJB/+WuffzCjV7/5efn///////+/v7//////////////v7///////XRsP/TnW3/8fT3//////////z/ddD//0Nxl/+zdkH88LmH/9CRWP2+qJT/0M7N/8/Jxv/Pysf/z8rH/8/Kxv/Py8n/zsO6/7+pmP/PzMv/zsnG/9bNyP+nsK7/h4R3/b2BT/+Sb1Ck7qxw/9GSW/69hlb/wYhX/8CIV//AiFf/wIhX/8CIVv/BiVj/xI1d/8CIVv/BiFf/vYZW/9STW/7ppmv/bE80pAAAAACUd16k+sui/+7AmPzwwpr/8MKa//DCmv/wwpr/8MKa//DCmf/vwZj/8MKa//DCmv/uwJj8+cui/5N3XaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { label: "Добавить url и сохранить страницу", func: "savePage()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAyMjIzwyMjFeLi0tVS8vLlcuLy9XLS4uVywsLFUuLi5aKSkpUggICBMAAAAAAgICAQAAAAAAAAAAAAAAABQTEyOgoJ/yysvL/s3Pz/7Z293/4OPk/+bp6f/t7u7/5eXl/LOysv97e3vLFRUWJQAAAAACAgIDAAAAAAAAAAA8PDxSz9HT/83Qz/fLx8T8z7+5/M/AsPzez8n89e3r/PDx8fyusLL43dzc/52dndMWFhY2AAAAAAICAgIAAAAAODg5T8bEv/+9o476vIR1/7WDcv+uj3v/spCA/8Wqk//Gtab/rqyq/+Pk5fn19fX+np6e4BQUFCgAAAAAAAAAAC4uJU29oYj/wLao+tLDqf/Mv7P/yLik/7zEvP/F0cr/v62Y/6+Kef/Z2NP/6Ors+d3c3P97e3vNBAQEDgIDAAZhRCuYxaSb/8Gvqfu2inL/vIF0/7FmUv+ygG//waaX/8m8tP/CoIn/vqOF/9zg3//l5ef7ycnJ/zY2Nm0hFw08rGJD/6BlYf2mWUD/rW9g/7aNff+ZRyL/pmxR/7RyWv+qaEz/uYR0/69kSf/k1tD//////Ozs6/1iYmK4WTMck61mVv+Yemj8hjsg/51bQ/+wem//n084/6+pq/+3p6H/l0Ux/4lFOf+gWDr/zq2X//b7/fzo6Oj/YWBgsXpXSbnMsp//wNC8/I9jWv+WX1X/tn5w/7iKfv/Tzc7/ztXc/513bf+MSjH/rWJG/7iRd//o7Oz85OPl/2BgYLN1aFqu2tO+/7ejnvyohYD/ybGb/7q1ov/HwrX/7/Lr//T19v/Hzs3/p4V0/6hvW/+6gHf/4uDh/N3e3v9hYWC0dWNPuaVXRP6cfWv8w7Gz/8vHsv/U2dP/4OHf//b08//9/Pv/3drZ/7rBw/+0ppv/wZ2F/9zc3PzW1tj/ZWRktE1HPW2oa1f/lX1t/cTP0v/Ew8T/3Nvd/9LR0//W1tf/5OXl/+/t6v/i6vD/wK+i/8y2o//b3t/81NTU/2FhYbMMDAsPsZ2a1tDX2P++vL390c/P/+Dh4P/b29r/09PS/9rY1//6+Pf/8PP3/8Kqlf/c0sv/3N7g/NTU1P9iYmKyAAAAAEY6MmXozcP/5ezt+OHk6Pzt7Oz9+Pj4/urq6/zs7/T8+f///NXGsPzey8P87vDy/OXm5vnf39//ZWVlrgAAAAAGBQQQdFdHy8Wfhv/d18797e7w/+3t7P/y8u7/7N/G/7unff+/uqT/4+Tl/97d3v/c3Nz/sLCw+h8fH0IBAQABAAEBABEVFx8vJB1cWy8ciZNrU8itknHrkWdIxUsqFnEnJSBRMjQ3WS8uL1csLCtVMjIyXiIiIj4BAQECAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="},
   { label: "Сохранить выделенный текст как txt файл", func: "saveSelectionToTxt()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAQE6AAAAZAAAAGgAAAJmAAACZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAaQABAmYAAQEjAAAAADlVkOdVcKHxVXKi8kdklPJLZpfyU3Cg8lJvn/JRbZ7yUW+g8lFun/JRbp/yUG6e8lVyofFVdKjzLkV45wAAAFABAQEAaIzF/3y34v9wsuL/cJe0/0lpgv9bjLP/dLLh/2+v3v9sq9v/cK3d/3Gv3v9sqtv/b7Df/4G77P9VcqT2AAAAVAMDAQBnir/+ZqfU/pDB4/7a3uD+j46N/kxYXv6To6/+1er4/tXp+P7J3/D+1ej4/svg8v6Gut/9aqzd/lhxnvAAAABSAwIBAGaIvv9pptX/ocfj//f4/P/P0tX/g4CA/1xZWf+Woqr/2uz8/9Hl+f/W5fT/2Of3/5fC4v5tq93/Vm+e8QAAAFIDAgEAaYm+/3mw2/+iyeX/9Pn8/+z0+//IzNL/d3h5/0tMTv+Mkpn/xdvs/9Hp/f/O4PL/msXk/nmz4/9XcJ/xAAAAUgMDAQBti7//k7/h/6fL5v/v9fn/4u73/9Dk9P+8wMT/YGpx/zJJWv94iJf/ztzo/9Pp/P+ZwuD+gLfk/1dwnvEAAABSAwMBAHOPwf+myub/sNHp//j7/P/6/P3/8fr///r39P+sxdP/IXWq/xJJcv+NjZD/0+Lu/6TN7f6Ft+L/WXGf8QAAAFIDAwEAd5LD/7PR6/+ZxOP/0ePx/97r9f/Y5/L/3e32/8Tc7f9gseT/CHK3/zBYdv+HiY7/lL/f/pLE7/9bcJ3xAAAAUgMDAQB4k8P/xNvx/5/F5f+kyOX/qMrn/6TH5f+kyOX/sM/q/5e51P9Mm83/GHm3/xxIav9fdYf+pMvs/1x1pfIAAABTAwMBAHmSxf/O4/T/y9/y/8Hb9P/C3PX/wNv0/7vW7/+93ff/utDm/42fsf9Gjbn/EXS2/ytSbv6Fj5r/WnGc8gAAAFICAwEBepPE/tHk9f/S5PX/vMjV/7fCzP+3w8//uMPP/7XBzP+6ytf/qa+4/3h/hv9Ghaz/JoO+/jNXdP82PVnyAAAAVgACAgCBmcb/2+r3/dHh8fyPkpX/kI6N/5yam/+dnJ3/paWk/6enpf+sr6//mpSR/3Bubf9SjbD8H4C+/QsrSvcCAAB/AAAAA3yVx//j8///3u/7/52gpf6pqKf+uLm5/rq7u/7Ly8v+ycnI/paWlf6LjY/+np2f/Xh+g/5gnL7/MX+y/xcgJ80BAgNNN1OUs6W84fDA1O73mJyj/ainpv+2trb/t7e4/8fHyP/Fxsb/kZGQ/4eGhP+vucT/j6G+/W53k/NlkbnwNoOv/AgiNb8CCBsQDRo/YwsaO3B0d33arKyp9q2trfWvr6/2u7u79ru7vPawr7H1sbCt9nJ2gOQIGD6bFCFEYB0qPE1Bf6SpEz9cggAAAAMCAQEBAQAAADIyMmlDQ0ONQUFBhUFBQYVCQkGFQkJBhUhISIRNTU2OKysrZAEAAAUBAQAAAgEAAAkEAAEDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Запомнить изображение как base64, в контекстном меню", value: "CB.Save.WebScreenShotOnImage"},
   { label: "Сохранить выделенный текст в файл, в контекстном меню", value: "CB.Save.SelectionToFile" },
   { label: "Открыть выделенный текст в внешнем редакторе, в контекстном меню", value: "CB.Save.TextToEditor"},
];

var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach((m,i)=> {
   if ("separator" in m) { menuPopup.appendChild(document.createElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute("class", "menuitem-iconic");
   if ("image" in m) mItem.setAttribute("image", m.image || array[i-1].image); 
   if ("value" in m) { 
       mItem.setAttribute('type', 'checkbox');
       mItem.setAttribute('checked', cbu.getPrefs(m.value) );
       mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));
       }
   if ("func" in m) mItem.addEventListener("command", ()=> eval(m.func.toString()));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");



// Сохранить как PNG страницу или части страницы .............
WebScreenShot = {
   capture: function(win, x, y, width, height) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = width;
      canvas.height = height;
      var ctx = canvas.getContext("2d");
      ((i = 17)=> { 
         try { ctx.drawWindow(win, x, y, canvas.width, canvas.height, "white") }
         catch(e) { canvas.height = canvas.width*i; arguments.callee(--i) };
      })();
      var url = makeURI(canvas.toDataURL("image/png"));
      
      var fp = window.makeFilePicker();
      fp.init(window, "Сохранить как…", fp.modeSave);
      fp.appendFilter("", "*.png");
      fp.defaultString = getTabLabel() + "  " + (new Date().toLocaleFormat("%d.%m.%Y. %H:%M:%S")) + ".png";
      if (fp.show() == fp.returnCancel || !fp.file) return;
      
      var wbp = window.makeWebBrowserPersist();
      parseInt(Services.appinfo.version) < 36
      ? wbp.saveURI(url, null, null, null, null, fp.file, null)
      : wbp.saveURI(url, null, null, null, null, null, fp.file, null); // если FF36+
   },
   captureAll: function() {
      var win = content;
      WebScreenShot.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY);
   },
   capturePage: function() {
      var win = content, doc = win.document, body = doc.body, html = doc.documentElement;
      var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft;
      var scrY = (body.scrollTop || html.scrollTop) - html.clientTop;
      WebScreenShot.capture(win, scrX, scrY, win.innerWidth, win.innerHeight);
   },
   onImage: function(image) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = image.naturalWidth;
      canvas.height = image.naturalHeight;
      var ctx = canvas.getContext('2d');
      ctx.drawImage(image, 0, 0);
      var base64 = canvas.toDataURL();
      gClipboard.write(base64);
   
      // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
      
      alertsService.showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> { 
         if (t == 'alertfinished')
             sss.unregisterSheet(uri, 0); // удалить стиль когда подсказка закрывается
      }, "");
   }
};

// Сохранить выбранную область страницы как PNG ....
WebScreenShotByClipping = {
   capture: WebScreenShot.capture,
   handleEvent: function(e) {
      if (e.button) return false;
          e.preventDefault();
          e.stopPropagation();
          switch(e.type){
                 case 'mousedown':
                    this.downX = e.pageX;
                    this.downY = e.pageY;
                    this.bs.left = this.downX + 'px';
                    this.bs.top = this.downY + 'px';
                    this.body.appendChild(this.box);
                    this.flag = true;
                    break;
                 case 'mousemove':
                    if (!this.flag) return;
                    this.moveX = e.pageX;
                    this.moveY = e.pageY;
                    if (this.downX > this.moveX) this.bs.left = this.moveX + 'px';
                    if (this.downY > this.moveY) this.bs.top  = this.moveY + 'px';
                    this.bs.width = Math.abs(this.moveX - this.downX) + 'px';
                    this.bs.height = Math.abs(this.moveY - this.downY) + 'px';
                    break;
                 case 'mouseup':
                    this.uninit();
                    break;
          }
   },
   init: function() {
      this.win = document.commandDispatcher.focusedWindow;
      if (this.win == window) this.win = content;
      this.doc = this.win.document;
      this.body = this.doc.body;
      if (!this.body instanceof HTMLBodyElement){
          alertsService.showAlertNotification(self.image, self.label, "Не удается захватить!");
          return false;
          }
      this.flag = null;
      this.box = this.doc.createElement('div');
      this.bs = this.box.style;
      this.bs.border = '#0f0 dashed 2px';
      this.bs.position = 'absolute';
      this.bs.zIndex = '2147483647';
      this.defaultCursor = getComputedStyle(this.body, '').cursor;
      this.body.style.cursor = 'crosshair';
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)];
      this.body.style.cursor = this.defaultCursor;
      this.body.removeChild(this.box);
      this.capture.apply(this, pos);
      ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};

// Сохранить выбранный элемент на странице как PNG ....
WebScreenShotByClick = {
   capture: WebScreenShot.capture,
   getPosition: function() {
      var html = this.doc.documentElement;
      var body = this.doc.body;
      var rect = this.target.getBoundingClientRect();
      return [
              this.win
             ,Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft
             ,Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop
             ,parseInt(rect.width)
             ,parseInt(rect.height)
          ];
   },
   highlight: function() {
      this.orgStyle = this.target.hasAttribute('style') ? this.target.style.cssText : false;
      this.target.style.cssText += 'outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;';
   },
   lowlight: function(e) {
      if (this.orgStyle) this.target.style.cssText = this.orgStyle;
      else this.target.removeAttribute('style'); 
   },
   handleEvent: function(e) {
      switch(e.type){
             case 'click':
                if (e.button) return;
                e.preventDefault();
                e.stopPropagation();
                this.lowlight();
                this.capture.apply(this, this.getPosition());
                this.uninit();
                break;
             case 'mouseover':
                if (this.target) this.lowlight();
                this.target = e.target;
                this.highlight();
                break;
      }
   },
   init: function() {
      this.win = content;
      this.doc = content.document;
      ["click", "mouseover"].forEach(type=> this.doc.addEventListener(type, this, true));
   },
   uninit: function() {
      this.target = false;
      ["click", "mouseover"].forEach(type=> this.doc.removeEventListener(type, this, true));
   },
};


// Сохранить страницу как PDF файл через сервис 'pdfmyurl.com' .............
function savePageToPDF(loc = content.location) {
   loc.href.startsWith("http") && loadURI("http://pdfmyurl.com?url=" + loc);
}; 

 
// Сохранить ярлык страницы в указанную папку или в последнюю папку сохранения ..............
function saveShortcuts(saveAs, shortcutName) {
   var url = content.document.location;
   cbu.isPref(pref, "C:\\");
  
   // блокируем создание ярлыков для внутренних страниц FF
   if ( ["about:", "chrome:", "jar:", "data:"].indexOf(url.protocol) !== -1 ) {   
         alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label, "Не поддерживается");
         return;
         }          
   
   // получить название ярлыка 
   if ( saveAs ) shortcutName = setPathToShortcut(shortcutName)
   else 
        shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();
   if ( saveAs && shortcutName == false ) return;
   
   // сохранить иконку таба в установленную папку
   var faviconName = "favicon" + Date.now();
   var favicon = saveFaviconToFolder(faviconName);
 
   // получить путь для сохранения ярлыка из 'about:config' 
   var pathToFolder = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var pathToShortcut = pathToFolder + shortcutName + ".url";
       
   // адрес страницы в UTF-8 если это протокол 'file' или в 'Punycode' если это .рф домен
   if ( url.protocol == 'file:' ) url = convertFromUnicode("UTF-8", url);   
   if ( url.host.slice(-3) == '.рф') url = Services.io.newURI(url, null, null).asciiSpec;
     
   // текст ярлыка из адреса страницы и пути к иконке таба    
   var text = "[InternetShortcut]" + "\r\n" + "URL=" + url;
   var pathToFavicon = "IconFile=" + faviconFolder + faviconName + ".ico" + "\r\n";
   if ( favicon == false ) var pathToFavicon = "";
   var data = text + "\r\n" + pathToFavicon + "IconIndex=0";      

   // записать текст в ярлык
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.initWithPath(pathToShortcut);
   foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(data, data.length);
   foStream.close();

   // подсказка
   var notification = 'Сохранил в: ' + pathToFolder;
   var image = (favicon == false) ? self.image : gBrowser.selectedBrowser.mIconURL;
   alertsService.showAlertNotification(image, shortcutName, notification);
};


// Установка пути и названия для сохранения ярлыка через диалог сохранения, отмена отдаст 'false' ..............
function setPathToShortcut(shortcutName) {     
   var pathToFile = gPrefService.getComplexValue(pref, Ci.nsISupportsString).data;
   var shortcutName = shortcutName ? shortcutName : getSiteName() + getTabLabel() + " " + Date.now();

   // диалог создания и установки пути    
   var fp = window.makeFilePicker();
   fp.init(window, "Укажите где сохранить ярлык страницы!", fp.modeSave);
   fp.appendFilters(fp.filterAll);
   fp.defaultString = shortcutName;
     
   if ( fp.show() == fp.returnCancel ) return false;          
     
   // убрать название файла из пути к файлу и записать путь в 'about:config'
   var filePath = fp.file.path.toString();
   var fileName = fp.file.leafName.toString();
   cbu.setPrefs(pref, convertFromUnicode("UTF-8", filePath.replace(fileName, "")) );      
   return fileName;
};


// Сохранить в указанную папку иконку таба как .ico и без диалога сохранения ..............
function saveFaviconToFolder(faviconName) {
   var url = gBrowser.mCurrentTab.image.replace("#-moz-resolution=16,16","");
   if ( !url || content.document.mozSyntheticDocument ) return false;
   if ( url.startsWith("http") ) url = "moz-anno:favicon:" + url;

   var img = new Image();
   img.onload = function() {
       var tools = Cc["@mozilla.org/image/tools;1"].getService(Ci.imgITools);
       var stream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
       var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);

       var request = img.QueryInterface(Ci.nsIImageLoadingContent).getRequest(img.CURRENT_REQUEST);
       var istrm = tools.encodeImage(request.image, "image/vnd.microsoft.icon", "format=bmp;bpp=32");
       stream.init(istrm);
       var data = stream.readBytes(stream.available());
       istrm.close(); stream.close();

       var path = faviconFolder + faviconName + ".ico";
       file.initWithPath(path);
       file.exists() && file.remove(false);
       try { file.create(file.NORMAL_FILE_TYPE, 448) } 
       catch(e) {
          setTimeout(()=> {  
             alertsService.showAlertNotification("chrome://global/skin/icons/error-16.png", self.label,
             "Не могу сохранить иконку вкладки в " + faviconFolder + "\n" + "Укажите в начале кода кнопки другой диск!");
          }, 2500);
       };
       cbu.writeFile(path, data);
   }
   img.setAttribute("src", url);
};


// Добавить адрес наверху страницы и открыть диалог сохранения страницы .............
function savePage() {
   var sURL = gURLBar.value;
   content.document.body.innerHTML = "<table width=100%><tr><td align=left><small><a target=_blank href=" + 
                                        sURL + ">"+ sURL + "</a></small>\n</td></tr></table>" + content.document.body.innerHTML;
   saveDocument(window.content.document);
};


// Сохранить иконку текущего сайта с диалогом сохранения .............
function saveFavicon() { saveImageURL(gBrowser.mCurrentTab.image, "save", null, false, false, null, content.document) };


// Скопировать иконку текущего сайта как base64 код .............
function copyFaviconData() {
   var img = new Image();
   img.src = gBrowser.mCurrentTab.image;
   WebScreenShot.onImage(img);
};


// Сохранить выделенный текст или весь текст на странице как txt файл .............
function saveSelectionToTxt() {
   var sel = getSelect();
   !sel && document.getElementById("cmd_selectAll").doCommand(); 
     
   // создать название файла из заголовка страницы и текущего времени и сохранить текст ....
   var fileTitle = getTabLabel() + '  ' + (new Date()).toLocaleFormat("%H·%M·%S");
   saveURL("data:text/plain," + encodeURIComponent(content.location + ("\r\n\r\n" + sel)), 
                                fileTitle + ".txt", null, false, false, null, content.document);
   !sel && goDoCommand("cmd_selectNone"); 
};

 
// Добавляем в контекстного меню страницы новые пункты .............
((contextMenu, el)=> {
   // в контекстного меню изображений ....
   var baseItem = contextMenu.appendChild(document.createElement("menuitem"));
   baseItem.id = "content-baseItem";
   baseItem.setAttribute("label", "Запомнить изображение как base64");
   baseItem.onclick =()=> WebScreenShot.onImage(gContextMenu.target);

   // в контекстного меню выделенного текста ....
   var saveItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   saveItem.id = "content-saveItem";
   saveItem.setAttribute("label", "Сохранить выделенный текст в файл");
   saveItem.onclick =()=> saveSelectionToFile();

   var editorItem = contextMenu.insertBefore(document.createElement("menuitem"), el);
   editorItem.id = "content-editorItem";
   editorItem.setAttribute("label", "Открыть выделенный текст в внешнем редакторе");
   editorItem.onclick =()=> textToEditor();

   // устанавливаем где и при каких настройках показывать новые пункты ....
   addEventListener('popupshowing', e=> {
      if (e.target != e.currentTarget) return;
      var sel = gContextMenu.isTextSelected;
      saveItem.hidden = !sel || !cbu.getPrefs("CB.Save.SelectionToFile");
      editorItem.hidden = !sel || !cbu.getPrefs("CB.Save.TextToEditor"); 
      baseItem.hidden =  !gContextMenu.onImage || !cbu.getPrefs("CB.Save.WebScreenShotOnImage"); 
   }, false, contextMenu);

   // удалять новые пункти при изминениях ....
   addDestructor(()=> {
      baseItem.remove(); saveItem.remove(); editorItem.remove();
   });   
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"));


// Сохранить выделенный текст в файл на рабочем столе .............
function saveSelectionToFile() {
   // создать текст для записи
   var url = content.document.location;
   if (/\.рф/.test(url.host)) url = convertFromUnicode("UTF-8", url);
   
   var time = new Date().toLocaleFormat("%H:%M:%S");
   var text = convertFromUnicode("UTF-8", getSelect()); 
   var title = convertFromUnicode("UTF-8", getTabLabel());
   
   var text = "..............................................................\n"
            + title + " - " + time + "\n" + url + "\n\n" + text + "\n\n\n";
   var text = text.replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");

   // путь к файлу и название файла
   var file = Services.dirsvc.get("Desk", Ci.nsIFile); 
   file.append("Save - " + (new Date()).toLocaleFormat("%d.%m.%Y") + ".txt");
          
   // создать файл с текстом или добавлять текст в файл
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.exists() ? foStream.init(file, 0x02 | 0x10, 0664, 0) : foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();

   // всплывающая подсказка дает возможность открыть файл если кликнуть на подсказке
   var notification = 'Сохранил выделенный текст в файл на рабочий стол'; 
   var image = gBrowser.mCurrentTab.image || self.image;
   alertsService.showAlertNotification(image, notification, "Кликни чтобы открыть файл", true, "", (s, t)=> { 
      if (t == 'alertclickcallback') file.launch();
   }, "");
};


// Создать текстовой файл с выделенным текстом в папке профиля и открыть в редакторе .............
function textToEditor() {
   var text = convertFromUnicode("UTF-16", getSelect()); 
   var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.append("TextToEditor.txt");
   custombuttonsUtils.writeFile(file.path, text);
   file.launch(); 
};


// Конвертировать текст в юникод .............
function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};


// Получить название домена с заглавным первым символом и без приставок( типа .ru и .com ) ..............
function getSiteName() {
   try { var domain = content.document.domain.split('.') } catch(e) { return "" };
   domain = (domain.length == 2) ? domain[0] : domain[1]
   return domain[0].toUpperCase() + domain.slice(1).split('.')[0] + " ";  
};


// Получить название вкладки без не сохраняемых символов и лишних пробелов ..............
function getTabLabel() { 
   var label = gBrowser.mCurrentTab.label;      
   var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   return label.substring(0, 50);
};

    
// Получить выделенный текст из страницы или 'false' ..............
function getSelect() {
   var el = document.commandDispatcher.focusedElement;
   try { return el.value.substring(el.selectionStart, el.selectionEnd) } catch(e) {};
   var sel = document.commandDispatcher.focusedWindow.getSelection();
   return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,"").replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");
};



function runSaveSnapshotToHtml() {
var saveToFile = function (fileContent, fileName) {
    var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = 'utf-8';
    fileContent = uc.ConvertFromUnicode(fileContent);

    var nsIFilePicker = Components.interfaces.nsIFilePicker;
    var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    fp.init(window, '', fp.modeSave);
    fp.defaultString = fileName;
    fp.appendFilters(fp.filterHTML);
    fp.appendFilters(fp.filterAll);
    if(fp.show() == fp.returnCancel) return;
    var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(fp.file, 0x02|0x20|0x08, 0666, 0);
    stream.write(fileContent, fileContent.length);
    stream.close();
};
var resolveURL = function (url, base) {
    try {
        var ioService = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces.nsIIOService);
        var baseURI = ioService.newURI(base, null, null);
        var absURI = ioService.newURI(url, null, baseURI);
        return absURI.spec;
    } catch (e) {}
};

var getSelWin = function (w) {
    if (w.getSelection().toString()) return w;
    for (var i = 0, f, r; f = w.frames[i]; i++) {
        try {
            if (r = getSelWin(f)) return r;
        } catch(e) {}
    }
};
var encodeImg = function (src, obj) {
    var canvas, img, ret = src;
    if (/^https?:\/\//.test(src)) {
        canvas = doc.createElement('canvas');
        if (!obj || obj.nodeName.toLowerCase() != 'img') {
            img = doc.createElement('img');
            img.src = src;
        } else {
            img = obj;
        };
        if (img.complete) try{
            canvas.width = img.width;
            canvas.height = img.height;
            canvas.getContext('2d').drawImage(img, 0, 0);
            ret = canvas.toDataURL((/\.jpe?g/i.test(src) ? 'image/jpeg' : 'image/png'));
        } catch (e) {};
        if (img != obj) img.src = 'about:blank';
    };
    return ret;
};
var toSrc = function (obj) {
    var strToSrc = function (str) {
        var chr, ret = '', i = 0, meta = {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '\x22' : '\\\x22', '\\': '\\\\'};
        while (chr = str.charAt(i++)) {
            ret += meta[chr] || chr;
        };
        return '\x22' + ret + '\x22';
    },
    arrToSrc = function (arr) {
        var ret = [];
        for (var i = 0; i < arr.length; i++) {
            ret[i] = toSrc(arr[i]) || 'null';
        };
        return '[' + ret.join(',') + ']';
    },
    objToSrc = function (obj) {
        var val, ret = [];
        for (var prop in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, prop) && (val = toSrc(obj[prop]))) ret.push(strToSrc(prop) + ': ' + val);
        };
        return '{' + ret.join(',') + '}';
    };

    switch (Object.prototype.toString.call(obj).slice(8, -1)) {
        case 'Array': return arrToSrc(obj);
        case 'Boolean':
        case 'Function':
        case 'RegExp': return obj.toString();
        case 'Date': return 'new Date(' + obj.getTime() + ')';
        case 'Math': return 'Math';
        case 'Number': return isFinite(obj) ? String(obj) : 'null';
        case 'Object': return objToSrc(obj);
        case 'String': return strToSrc(obj);
        default: return obj ? (obj.nodeType == 1 && obj.id ? 'document.getElementById(' + strToSrc(obj.id) + ')' : '{}') : 'null';
    }
};

var mainWin = document.commandDispatcher.focusedWindow.top == content ? document.commandDispatcher.focusedWindow : content;
var selWin = getSelWin(mainWin), win = selWin || mainWin, doc = win.document, loc = win.location;
var ele, pEle, clone, reUrl = /(url\(\x22)(.+?)(\x22\))/g;

if (selWin) {
    var rng = win.getSelection().getRangeAt(0);
    pEle = rng.commonAncestorContainer;
    ele = rng.cloneContents();
} else {
    pEle = doc.documentElement;
    ele = (doc.body || doc.getElementsByTagName('body')[0]).cloneNode(true);
};
while (pEle) {
    if (pEle.nodeType == 1) {
        clone = pEle.cloneNode(false);
        clone.appendChild(ele);
        ele = clone;
    };
    pEle = pEle.parentNode
};
var sel = doc.createElement('div');
sel.appendChild(ele);

for (var el, all = sel.getElementsByTagName('*'), i = all.length; i--;) {
    el = all[i];
    if (el.style && el.style.backgroundImage) el.style.backgroundImage = el.style.backgroundImage.replace(reUrl, function (a, prev, url, next) {
        if (!/^[a-z]+:/.test(url)) url = resolveURL(url, loc.href);
        return prev + encodeImg(url) + next;
    });
    switch (el.nodeName.toLowerCase()) {
        case 'link':
        case 'style':
        case 'script': el.parentNode.removeChild(el); break;
        case 'a': 
        case 'area': if (el.hasAttribute('href') && el.getAttribute('href').charAt(0) != '#') el.href = el.href; break;
        case 'img':
        case 'input': if (el.hasAttribute('src')) el.src = encodeImg(el.src, el); break;
        case 'audio':
        case 'video':
        case 'embed':
        case 'frame':
        case 'iframe': if (el.hasAttribute('src')) el.src = el.src; break;
        case 'object': if (el.hasAttribute('data')) el.data = el.data; break;
        case 'form': if (el.hasAttribute('action')) el.action = el.action; break;
    }
};

var head = ele.insertBefore(doc.createElement('head'), ele.firstChild);
var meta = doc.createElement('meta');
meta.httpEquiv = 'content-type';
meta.content = 'text/html; charset=utf-8';
head.appendChild(meta);
var title = doc.getElementsByTagName('title')[0];
if (title) head.appendChild(title.cloneNode(true));

head.copyScript = function (unsafeWin) {
    if ('$' in unsafeWin) return;
    var f = doc.createElement('iframe');
    f.src = 'about:blank';
    f.setAttribute('style', 'position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;');
    doc.documentElement.appendChild(f);
    var str, script = doc.createElement('script');
    script.type = 'text/javascript';
    for (var name in unsafeWin) {
        if (name in f.contentWindow || !/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)) continue;
        try {
            str = toSrc(unsafeWin[name]);
            if (!/\{\s*\[native code\]\s*\}/.test(str)) {
                script.appendChild(doc.createTextNode('var ' + name + ' = ' + str.replace(/<\/(script>)/ig, '<\\/$1') + ';\n'));
            }
        } catch (e) {};
    };
    f.parentNode.removeChild(f);
    if (script.childNodes.length) this.nextSibling.appendChild(script);
};
head.copyScript(win.wrappedJSObject || win);

head.copyStyle = function (s) {
    if (!s) return;
    var style = doc.createElement('style');
    style.type = 'text/css';
    if (s.media && s.media.mediaText) style.media = s.media.mediaText;
    try {
        for (var i = 0, rule; rule = s.cssRules[i]; i++) {
            if (rule.type != 3) {
                if((!rule.selectorText || rule.selectorText.indexOf(':') != -1) || (!sel.querySelector || sel.querySelector(rule.selectorText))) {
                    var css = !rule.cssText ? '' : rule.cssText.replace(reUrl, function (a, prev, url, next) {
                        if (!/^[a-z]+:/.test(url)) url = resolveURL(url, s.href || loc.href);
                        if(rule.type == 1 && rule.style && rule.style.backgroundImage) url = encodeImg(url);
                        return prev + url + next;
                    });
                    style.appendChild(doc.createTextNode(css + '\n'));
                }
            } else {
                this.copyStyle(rule.styleSheet);
            }
        }
    } catch(e) {
        if (s.ownerNode) style = s.ownerNode.cloneNode(false);
    };
    this.appendChild(style);
};
var sheets = doc.styleSheets;
for (var j = 0; j < sheets.length; j++) head.copyStyle(sheets[j]);
head.appendChild(doc.createTextNode('\n'));

var doctype = '', dt = doc.doctype;
if (dt && dt.name) {
    doctype += '<!DOCTYPE ' + dt.name;
    if (dt.publicId) doctype += ' PUBLIC \x22' + dt.publicId + '\x22';
    if (dt.systemId) doctype += ' \x22' + dt.systemId + '\x22';
    doctype += '>\n';
};
var fileName = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop());
fileName = fileName.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).replace(/^\s+|\s+$/g, '');
fileName += (function () {
    var d = new Date(), z = function(n){return '_' + (n < 10 ? '0' : '') + n};
    return z(d.getHours()) + z(d.getMinutes()) + z(d.getSeconds());
})();
if(!/\.html?$/.test(fileName))fileName += '.html';

saveToFile(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->', fileName);
};

Отредактировано _zt (08-03-2017 10:54:39)

Отсутствует

 

№1143108-03-2017 11:13:33

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

_zt пишет

Вы забыли вставить добавленный ранее код "Сохранить страницу в html одним файлом".

Код "Сохранить страницу в html одним файлом" не мой потому я него в кнопку Save официально не вставляю.

Отсутствует

 

№1143208-03-2017 14:09:09

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 31.0

Re: Custom Buttons

Есть на харде текстовый файл.
Как можно в js содержание этого файла присвоить переменной?

Отсутствует

 

№1143308-03-2017 14:25:44

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

Duche пишет

Хотел приспособить её (и другие кнопки) для замены Tab Mix Plus

https://forum.mozilla-russia.org/viewto … 57#p732357 Вопрос снимается.
Но появилось сразу три новых. Первое. Есть кнопка

скрытый текст

Выделить код

Код:

// Открывать всё в новых вкладках, от 16.12.2013. ......................................
(function () {
   // открывать всё из ниже перечисленного в новых вкладках, если пустая страница открывать в текущей ....
   const where = whereToOpenLink;
   eval("whereToOpenLink = " + where.toString()
   .replace('return "current";\n}', (function() {
      switch ( e.originalTarget.id ) {
        case "bookmarksMenuPopup":
        case "goPopup":
        case "appmenu_bookmarksPopup":
        case "appmenu_historyMenupopup":
        case "personal-bookmarks":
        case "bookmarks-menu-button":
        case "historymenu_history":
        case "home-button":
        case "page-proxy-stack":
        case "go-button":
        case "urlbar-go-button":
        case "PopupAutoCompleteRichResult":
        case "searchbar":
        case "PopupAutoComplete":
        return "tab";
        
        default: return "current";  
      }
   }).toString().replace(/^.*{|}$/g, "")+"}"));
     
   // открывать закладки и историю в новых вкладках, если букмарклети или пустая страница в текущей ....
   const openNode = PlacesUIUtils._openNodeIn;
   eval("PlacesUIUtils._openNodeIn = " + openNode.toString().replace(') {', '){\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) aWhere = "current";\n aWhere = (aWhere == "tab" || aNode.uri.startsWith("javascript:") ) ? "current" : "tab";\n')
   );

   // если JavaScript ссылка или пустая страница открывать в текущей ....
   const linkIn = openLinkIn;
   eval("openLinkIn = " + linkIn.toString().replace(';', ';;\n if ( url.startsWith("javascript:") ) where = "current";\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) where = "current";')
   );

   // команды адресной строки открывают всё связанное с адресной строкой в новых вкладках, если alt+ в текущей ....
   const handle = gURLBar.handleCommand;
   eval("gURLBar.handleCommand = " + handle.toString().replace('aTriggeringEvent.altKey;', 'aTriggeringEvent.altKey == false;'));
   
   // 'Вставить и перейти' из адресной строки  открывает в новых вкладках ....
   addEventListener("popupshowing", function(e) {
      var menupopup = e.originalTarget;
      var pasteAndGo = menupopup.getElementsByAttribute("anonid", "paste-and-go")[0];
      if ( !pasteAndGo ) return;
      pasteAndGo.setAttribute("oncommand", "event.preventDefault(); gURLBar.select(); goDoCommand('cmd_paste'); gURLBar.handleCommand(event);")
   }, false, document.getElementById("urlbar") );
   
   // удалять изменения из внутренних функций Firefox ....
   addDestructor(function() {
      eval("whereToOpenLink = " + where);
      eval("PlacesUIUtils._openNodeIn = " + openNode);
      eval("openLinkIn = " + linkIn);
      eval("gURLBar.handleCommand = " + handle);
   });


не открывает в новой вкладке из Гугл, поправьте пожалуйста. И возможно сделать так, чтобы при закрытии открытой вкладки ,был переход на вкладку откуда была открыта вкладка, а не на ближайшую левую.

Второе. Нужна кнопка "Двойной клик левой кнопкой на табе, обновить страницу".

Третье. Нужна кнопка "С 10 последними закрытыми вкладами" при коротком нажатии ЛКМ  открывается последняя закрытая вкладка и так далее ,каждое нажатие ,открытие ранее закрытой вкладки и так до 10. При длительном нажатии ЛКМ ,под кнопкой открывался список последних 10 закрытых вкладок.
Заранее спасибо.

Отредактировано Duche (08-03-2017 14:30:21)

Отсутствует

 

№1143408-03-2017 14:40:40

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 557
UA: Firefox 52.0

Re: Custom Buttons

Отсутствует

 

№1143508-03-2017 15:10:59

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

Ki_rrrilll пишет

Есть на харде текстовый файл.
Как можно в js содержание этого файла присвоить переменной?

Самое простое:

Выделить код

Код:

var path = "C:\\Documents and Settings\\Desktop\\Save.txt";
var text = custombuttonsUtils.readFile(path);

но могут быть проблемы с кодировками.

Отсутствует

 

№1143608-03-2017 18:21:52

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

sonyas75 пишет

Третье

sonyas75 Спасибо , поставил . Только иконку заменил , блёклая.

Отсутствует

 

№1143708-03-2017 21:31:24

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

mahtanoronra пишет

не могли бы вы эту кнопку подправить
https://forum.mozilla-russia.org/viewto … 50#p732350
что бы пункт меню был на странице по правому клику ещё
и есть ли способ добавить в кнопку MicrosoftEdge, пробовал разными путями не вышло

Выделить код

Код:

// Открыть страницу в другой программе из контекстного меню, от 26.10.2016. .............
(()=> {
   var array = [
      ["Internet explorer", "C:\\Program Files\\Internet Explorer\\iexplore.exe", ""],
      ["Добавить свое название", "Добавить путь к своей программе, с двойными обратными слэшами как разделителями пути", "добавить желаемый ключ или оставить пустым"],
      ["PotPlayer", "С:\\....\\Portable\\PotPlayer\\PotPlayerMini.exe", ""],
      ["PotPlayer Add", "С:\\...\\Portable\\PotPlayer\\PotPlayerMini.exe", "/add"],
   ]
  
   var tabContextMenu = document.getElementById("tabContextMenu");
   var menu1 = tabContextMenu.appendChild(document.createElement("menu"));
   menu1.setAttribute("label", "Открыть вкладку в ... ");
   menu1.setAttribute("class", "menu-iconic");
   menu1.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJP8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/+ysrL/5OTk/+Pj4//i4uL/4eHh/97e3nAAAAAAAAAAAAAAAAAVFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf8VFRX/tbW1/+jo6P/n5+f/5+fn/+bm5v/l5eX/3t7ecAAAAAAAAAAAGBgY/xgYGP8YGBj/GBgY/xgYGP8YGBj/GBgY/7a2tv/p6en/6Ojo/+fn5//m5ub/5ubm/97e3v8AAAAAAAAAABsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/+3t7f/6urq/+np6f/o6Oj/5+fn/+fn5//e3t7/AAAAAAAAAAAeHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/uLi4/+rq6v/p6en/6enp/+jo6P/n5+f/39/f/wAAAAAAAAAAISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/7m5uf/r6+v/6urq/+rq6v/p6en/6Ojo/+Dg4P8AAAAAAAAAACEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf+Wlpb/u7u7/7u7u/+6urr/ubm5/7m5uf+zs7P/AAAAAAAAAAC9vb3/v7+//7+/v/++vr7/vr6+/729vf+Wlpb/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/wAAAAAAAAAA7+/v//Pz8//y8vL/8fHx//Hx8f/w8PD/vb29/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8AAAAAAAAAAPDw8P/09PT/8/Pz//Ly8v/x8fH/8fHx/729vf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//AAAAAAAAAADx8fH/9PT0//T09P/z8/P/8vLy//Hx8f+/v7//MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/wAAAAAAAAAA8vLy//X19f/09PT/9PT0//Pz8//y8vL/wMDA/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf8AAAAAAAAAAN7e3nD29vb/9fX1//T09P/09PT/8/Pz/8HBwf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/AAAAAAAAAAAAAAAA3t7ecPPz8//y8vL/8vLy//Hx8f/BwcH/ODg4/zk5Of85OTn/OTk5/zk5Of84ODj/Pj4+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAIADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAADAAQAA//8AAA==");
   addEventListener("popupshowing", e=> {  
      menu1.hidden = !e.target.triggerNode.linkedBrowser.currentURI.scheme.startsWith("http");             
   }, false, tabContextMenu);
   addDestructor(()=> menu1.remove());
   setMenupopup(menu1);

   var tabContextMenu = document.getElementById("contentAreaContextMenu");
   var menu2 = tabContextMenu.appendChild(document.createElement("menu"));
   menu2.setAttribute("label", "Открыть страницу в ... ");
   menu2.setAttribute("class", "menu-iconic");
   menu2.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJP8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/+ysrL/5OTk/+Pj4//i4uL/4eHh/97e3nAAAAAAAAAAAAAAAAAVFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf8VFRX/tbW1/+jo6P/n5+f/5+fn/+bm5v/l5eX/3t7ecAAAAAAAAAAAGBgY/xgYGP8YGBj/GBgY/xgYGP8YGBj/GBgY/7a2tv/p6en/6Ojo/+fn5//m5ub/5ubm/97e3v8AAAAAAAAAABsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/+3t7f/6urq/+np6f/o6Oj/5+fn/+fn5//e3t7/AAAAAAAAAAAeHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/uLi4/+rq6v/p6en/6enp/+jo6P/n5+f/39/f/wAAAAAAAAAAISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/7m5uf/r6+v/6urq/+rq6v/p6en/6Ojo/+Dg4P8AAAAAAAAAACEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf+Wlpb/u7u7/7u7u/+6urr/ubm5/7m5uf+zs7P/AAAAAAAAAAC9vb3/v7+//7+/v/++vr7/vr6+/729vf+Wlpb/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/wAAAAAAAAAA7+/v//Pz8//y8vL/8fHx//Hx8f/w8PD/vb29/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8AAAAAAAAAAPDw8P/09PT/8/Pz//Ly8v/x8fH/8fHx/729vf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//AAAAAAAAAADx8fH/9PT0//T09P/z8/P/8vLy//Hx8f+/v7//MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/wAAAAAAAAAA8vLy//X19f/09PT/9PT0//Pz8//y8vL/wMDA/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf8AAAAAAAAAAN7e3nD29vb/9fX1//T09P/09PT/8/Pz/8HBwf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/AAAAAAAAAAAAAAAA3t7ecPPz8//y8vL/8vLy//Hx8f/BwcH/ODg4/zk5Of85OTn/OTk5/zk5Of84ODj/Pj4+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAIADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAADAAQAA//8AAA==");
   addEventListener("popupshowing", ()=> menu2.hidden = gContextMenu.onLink, false, contextMenu); 
   addDestructor(()=> menu2.remove());
   setMenupopup(menu2);

   var contextMenu = document.getElementById("contentAreaContextMenu");
   var menu3 = contextMenu.appendChild(document.createElement("menu"));
   menu3.setAttribute("label", "Открыть ссылку в ... ");
   menu3.setAttribute("class", "menu-iconic");
   menu3.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJP8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/+ysrL/5OTk/+Pj4//i4uL/4eHh/97e3nAAAAAAAAAAAAAAAAAVFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf8VFRX/tbW1/+jo6P/n5+f/5+fn/+bm5v/l5eX/3t7ecAAAAAAAAAAAGBgY/xgYGP8YGBj/GBgY/xgYGP8YGBj/GBgY/7a2tv/p6en/6Ojo/+fn5//m5ub/5ubm/97e3v8AAAAAAAAAABsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/+3t7f/6urq/+np6f/o6Oj/5+fn/+fn5//e3t7/AAAAAAAAAAAeHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/uLi4/+rq6v/p6en/6enp/+jo6P/n5+f/39/f/wAAAAAAAAAAISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/7m5uf/r6+v/6urq/+rq6v/p6en/6Ojo/+Dg4P8AAAAAAAAAACEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf+Wlpb/u7u7/7u7u/+6urr/ubm5/7m5uf+zs7P/AAAAAAAAAAC9vb3/v7+//7+/v/++vr7/vr6+/729vf+Wlpb/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/wAAAAAAAAAA7+/v//Pz8//y8vL/8fHx//Hx8f/w8PD/vb29/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8AAAAAAAAAAPDw8P/09PT/8/Pz//Ly8v/x8fH/8fHx/729vf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//AAAAAAAAAADx8fH/9PT0//T09P/z8/P/8vLy//Hx8f+/v7//MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/wAAAAAAAAAA8vLy//X19f/09PT/9PT0//Pz8//y8vL/wMDA/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf8AAAAAAAAAAN7e3nD29vb/9fX1//T09P/09PT/8/Pz/8HBwf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/AAAAAAAAAAAAAAAA3t7ecPPz8//y8vL/8vLy//Hx8f/BwcH/ODg4/zk5Of85OTn/OTk5/zk5Of84ODj/Pj4+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAIADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAADAAQAA//8AAA==");
   addEventListener("popupshowing", ()=> menu3.hidden = !gContextMenu.onLink, false, contextMenu); 
   addDestructor(()=> menu3.remove());
   setMenupopup(menu3);
   
   function setMenupopup(menu) {
      var menuPopup = menu.appendChild(document.createElement("menupopup"));              
      array.forEach(m=> {
         var mItem = document.createElement("menuitem");
         mItem.setAttribute("label", m[0]);
         mItem.setAttribute("class", "menuitem-iconic");
         mItem.setAttribute("image", "moz-icon://file://" + m[1]); 
         mItem.onclick =()=> openWith(m[1], m[2]);
         menuPopup.appendChild(mItem);
      })
   };

   function openWith(path, arg) { 
      try { var url = gContextMenu.getLinkURL() } 
      catch(e) {  
         var loc = content.document.location;
         var url = (loc.host.slice(-3) == '.рф') ? Services.io.newURI(loc.href, null, null).asciiSpec : loc; 
      };
     
      var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);    
      file.initWithPath(path);
      var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
      process.init(file);
      process.run(false, [url, arg], 2);
   };

})();

Насчёт MicrosoftEdge не знаю, у меня на win7 его нет. Наверно путь не правильный, это легко проверить, если путь правильный в меню будет иконка MicrosoftEdge.

Добавлено 08-03-2017 21:50:22

Duche пишет

Второе. Нужна кнопка "Двойной клик левой кнопкой на табе, обновить страницу".

Выделить код

Код:

addEventListener("dblclick", e=> {
  if ( e.button == 0 && e.target.localName == "tab" ) BrowserReload();
}, true, gBrowser.mTabContainer);

Отредактировано bunda1 (08-03-2017 21:50:22)

Отсутствует

 

№1143808-03-2017 22:14:06

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 505
UA: Palemoon 27.0

Re: Custom Buttons

Подскажите.
НЕ правильный код, хотелка такая:

Выделить код

Код:

var elem=document.getElementsByTagName("*");  
           for(var i=0; i<elem.length; i++)  {

               if (elem != "player") {
                   elem.style.display = "none";
                  };
          };

ругается на TypeError: elem.style is undefined   Да и условие скорей всего не правильное.
Хочу убрать все на странице, кроме плеера.  когда открепил вкладку и закинул в уголок поверх всех, лекция или фильм какой.


...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation

Отсутствует

 

№1143908-03-2017 22:19:00

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

bunda1 пишет

Второе. Нужна кнопка "Двойной клик левой кнопкой на табе, обновить страницу".

Спасибо. Осталось решить первый вопрос https://forum.mozilla-russia.org/viewto … 68#p732468.  Дополнительная маленькая просьба. Напишите пажалуста код который при закрытии последней вкладки, загружал домашнюю страницу.

Отсутствует

 

№1144008-03-2017 22:34:08

mahtanoronra
Участник
 
Группа: Members
Зарегистрирован: 08-03-2009
Сообщений: 63
UA: Firefox 45.0

Re: Custom Buttons

bunda1 пишет

Насчёт MicrosoftEdge не знаю, у меня на win7 его нет. Наверно путь не правильный, это легко проверить, если путь правильный в меню будет иконка MicrosoftEdge.

спс. да там запуск подобного рода

Выделить код

Код:

%windir%\explorer.exe shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge

через выполнить пашет а через кнопку нет. пробовал и так делать и делить на файл + параметр запуска. пробовал даже ярлык созданный по примеру выше совать,толку ноль.

Отсутствует

 

№1144108-03-2017 23:05:41

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

mahtanoronra пишет

спс. да там запуск подобного рода

Выделить код

Код:

%windir%\explorer.exe shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge

А если так:

Выделить код

Код:

["MicrosoftEdge", "C:\\Windows\\SystemApps\\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\\MicrosoftEdge.exe", ""],

Отсутствует

 

№1144208-03-2017 23:17:31

mahtanoronra
Участник
 
Группа: Members
Зарегистрирован: 08-03-2009
Сообщений: 63
UA: Firefox 45.0

Re: Custom Buttons

bunda1
нет..там что то другое,так как даже сам EXE файл через ос не запустить. тока способом выше..
по разному пробовал... так тоже.

Отредактировано mahtanoronra (08-03-2017 23:18:07)

Отсутствует

 

№1144308-03-2017 23:20:54

FireFox Future
Участник
 
Группа: Members
Зарегистрирован: 13-06-2013
Сообщений: 532
UA: Firefox 52.0

Re: Custom Buttons

На FF 52 ESR не работает. Что делать ?

Отсутствует

 

№1144408-03-2017 23:33:25

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

mahtanoronra пишет

bunda1
нет..там что то другое,так как даже сам EXE файл через ос не запустить. тока способом выше..
по разному пробовал... так тоже.

А какой текст в ярлике MicrosoftEdge?

Добавлено 08-03-2017 23:36:38

FireFox Future пишет

На FF 52 ESR не работает. Что делать ?

Можно удалить или отключить установленый Custom Buttons и установить от сюда подписаную версию Custom Buttons: Custom Buttons • View topic - [Signed fixed extension attached] CB broken on Firefox 48+

Отредактировано bunda1 (08-03-2017 23:36:38)

Отсутствует

 

№1144508-03-2017 23:47:08

mahtanoronra
Участник
 
Группа: Members
Зарегистрирован: 08-03-2009
Сообщений: 63
UA: Firefox 45.0

Re: Custom Buttons

bunda1 пишет

А какой текст в ярлике MicrosoftEdge?

ярлыка нет,там похоже браузер этот как приложение идёт win10. по крайне мере по способу загрузки..запутаный
а для запуска по ярлыку создал это
%windir%\explorer.exe shell:Appsfolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge
но в КБ не пашет.

Отсутствует

 

№1144608-03-2017 23:59:58

FireFox Future
Участник
 
Группа: Members
Зарегистрирован: 13-06-2013
Сообщений: 532
UA: Firefox 52.0

Re: Custom Buttons

bunda1
Большое спасибо )

Отсутствует

 

№1144709-03-2017 04:16:23

Ki_rrrilll
Участник
 
Группа: Members
Зарегистрирован: 22-11-2013
Сообщений: 127
UA: Firefox 31.0

Re: Custom Buttons

bunda1 пишет
Ki_rrrilll пишет

Есть на харде текстовый файл.
Как можно в js содержание этого файла присвоить переменной?

Самое простое:

Выделить код

Код:

var path = "C:\\Documents and Settings\\Desktop\\Save.txt";
var text = custombuttonsUtils.readFile(path);

но могут быть проблемы с кодировками.

bunda1
К сожалению проблемы с кодировками как раз и получились. А какие еще есть способы?

Отсутствует

 

№1144809-03-2017 15:45:21

intersk
Участник
 
Группа: Members
Зарегистрирован: 20-06-2013
Сообщений: 104
UA: Firefox 52.0

Re: Custom Buttons

bunda1 пишет

_zt пишет: Вы забыли вставить добавленный ранее код "Сохранить страницу в html одним файлом".Код "Сохранить страницу в html одним файлом" не мой потому я него в кнопку Save официально не вставляю.

"Сохранить страницу в html одним файлом" очень нужная функция. Можете её вставить в код вашей кнопки? Автором можно указать другого пользователя. Или придумайте свой код - может он будет даже более оптимизированный

Отредактировано intersk (09-03-2017 15:53:24)

Отсутствует

 

№1144909-03-2017 21:02:37

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 505
UA: Palemoon 27.0

Re: Custom Buttons

Как сделать исключения для этого. Вот перекрашиваю все элементы страницы. А , допустим, нужно один или несколько элементов исключить. Известны их "названия" id или class.
Можно как-нить сделать исключение.

Выделить код

Код:

var elem = content.document.getElementsByTagName('*');

          for (var i = 0; i < elem.length; i++) {
                        elem[i].style.backgroundColor = "#FFFF00";
             };

:sick:


...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation

Отсутствует

 

№1145009-03-2017 21:05:02

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

Ki_rrrilll пишет
bunda1 пишет
Ki_rrrilll пишет

Есть на харде текстовый файл.
Как можно в js содержание этого файла присвоить переменной?

Самое простое:

Выделить код

Код:

var path = "C:\\Documents and Settings\\Desktop\\Save.txt";
var text = custombuttonsUtils.readFile(path);

но могут быть проблемы с кодировками.

bunda1
К сожалению проблемы с кодировками как раз и получились. А какие еще есть способы?

Выделить код

Код:

var path = "C:\\Documents and Settings\\Desktop\\Save.txt";
var text = custombuttonsUtils.readFile(path);
var utf8Converter = Cc["@mozilla.org/intl/utf8converterservice;1"].getService(Ci.nsIUTF8ConverterService);
var text = utf8Converter.convertURISpecToUTF8(text, "UTF-8");
alert(text);

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]