bunda1
Здесь ты мне дал код, который ищет выделенный текст в активной/фоновой вкладке, все ищет нормально, но как оказалось вкладки с поиском открываются справа от всех вкладок, а не от текущей, как например открываются ссылки или картинки с помощью драг-жестов. Уточню, стоит TU и там настроено открытие ссылок справа от текущей страницы. И еще из-за этого получается что страницы с поиском не автогруппируются в стэк, как например открытые в новых вкладках ссылки или изображения. Можно как-то исправить?
Отсутствует
Kamui
{dir:'UD', modifier:'',name:'Поиск текста в google в новой активной странице',obj:'text',cmd:function(self,event,info){ var x = gBrowser.mCurrentTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab("http://www.google.com/search?q=" + document.commandDispatcher.focusedWindow.getSelection()), x) }}, {dir:'DU', modifier:'',name:'Поиск текста в google в новой фоновой странице',obj:'text',cmd:function(self,event,info){ gBrowser.moveTabTo(gBrowser.addTab("http://www.google.com/search?q=" + document.commandDispatcher.focusedWindow.getSelection()), gBrowser.mCurrentTab._tPos +1) }},
Отсутствует
bunda1
Лень проверять, как ведет себя с расширениями, но встроенная настройка browser.tabs.insertRelatedAfterCurrent отрабатывает при передаче aReferrerURI в
<method name="addTab"> <parameter name="aURI"/> <parameter name="aReferrerURI"/> <parameter name="aCharset"/> <parameter name="aPostData"/> <parameter name="aOwner"/> <parameter name="aAllowThirdPartyFixup"/>
(см. chrome://browser/content/tabbrowser.xml)
То есть можно вот так:
gBrowser.selectedTab = gBrowser.addTab( "http://www.google.com/search?q=" + encodeURIComponent(document.commandDispatcher.focusedWindow.getSelection()), makeURI("http://www.google.com/") // aReferrerURI );
Добавлено 17-09-2012 19:35:08
Еще можно для Tree Style Tab добавить:
if("TreeStyleTabService" in window) TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab); gBrowser.selectedTab = gBrowser.addTab( "http://www.google.com/search?q=" + encodeURIComponent(document.commandDispatcher.focusedWindow.getSelection()), makeURI("http://www.google.com/") // aReferrerURI );
Отредактировано Infocatcher (17-09-2012 19:35:08)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
bunda1
Так работает, но не полностью как надо когда вкладка стоит одна или она крайняя в стэке, то при открытии стэк не создается.
Попробовал сделать как написал Infocatcher, вроде работает, но не уверен все ли я правильно вставил
Вставил так:
{dir:'U', modifier:'',name:'Поиск текста в google в новой активной странице',obj:'text',cmd:function(self,event,info){gBrowser.selectedTab = gBrowser.addTab( "http://www.google.com/search?q=" + encodeURIComponent(document.commandDispatcher.focusedWindow.getSelection()), makeURI("http://www.google.com/") // aReferrerURI ); }},
и
{dir:'D', modifier:'',name:'Поиск текста в google в новой фоновой странице',obj:'text',cmd:function(self,event,info){gBrowser.addTab( "http://www.google.com/search?q=" + encodeURIComponent(document.commandDispatcher.focusedWindow.getSelection()), makeURI("http://www.google.com/") // aReferrerURI );}},
Если я сделаю каждый жест в одну строку, то ничего не испортиться?
Попробовал, вроде ничего не сломалось и теперь работает как надо спасибо Infocatcher и bunda1!
Теперь еще маленькая просьба, нужен код для такого же поиска, но в текущей вкладке
Отредактировано Kamui (17-09-2012 19:51:23)
Отсутствует
Infocatcher
Спасыбо
Kamui
{dir:'DUD', modifier:'',name:'Поиск текста',obj:'text',cmd:function(self,event,info){ loadURI("http://www.google.com/search?q=" + document.commandDispatcher.focusedWindow.getSelection()) }},
Отсутствует
может в СМ както по другому надо окно открывать чтоб панели скрыты были и кнопки не обрабатывалсь?
Очевидно, можно открыть не chrome://browser/content/browser.xul (chrome://navigator/content/navigator.xul), а свое окно.
Например, так:
var uri = "http://translate.google.com/translate?sl=auto&tl=en&ie=UTF-8&u=http%3A%2F%2Fforum.mozilla-russia.org%2Fviewtopic.php%3Fpid%3D582337%23p582337"; var winSrc = '\ <?xml version="1.0"?>\n\ <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>\n\ <window xmlns="' + xulns + '"\n\ title="Title"\n\ width="400"\n\ height="350">\n\ <browser type="content" flex="1" src="' + encodeHTML(uri) + '" />\n\ </window>'; window.openDialog( "data:application/vnd.mozilla.xul+xml," + encodeURIComponent(winSrc.trimLeft()), "_blank", "chrome,resizable,centerscreen,location=0" ); function encodeHTML(s) { return s .replace(/&/g, "&") .replace(/</g, "<") .replace(/>/g, ">") .replace(/"/g, """); }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Подскажите как можно оптимизировать этот код:
/*Initialization code*/ var prefBranch = Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefBranch); var pref = new Object(); Components.utils.import("resource://gre/modules/AddonManager.jsm"); //вписываем название джетпаков pref["Adblock Plus"] = "Jetpacks"; pref["Config Descriptions"] = "Jetpacks1"; pref["Enjoy Reading"] = "Jetpacks2"; var strEnable = "Jetpack включен"; var strDisable = "Jetpack выключен"; var imgEnable = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAltJREFUOMtt0l9olXUcx/HX8zzThHh07cLQJSZoozXNONMonYxI6zhwhnVnGQldqASZKN50USgWE0ThgCEiZV2JyNDpEnXMLhbuNBC7SOnfVHQj5p/Hmmw+53hxzo7T9bv5Xfy+78/v8/1+P4EnT7NqvIOMVEYkRF6q16hjegxBsVgMgiAoBk/AWRyQminyf2cguzi7veOrjg+xBD8H4+Cd2A7xNJLZxDUkMISrTH8QO7e3R/3z9TCKVSWBJitEOsFC1BOXpZOyfhzFOptPeW3O6wqFgh9Of7/7/bc/2BJoVi11CbVewXziMhiX4SSkY/lx2VktYOOejXJHcwOmeKlKqkWk1jTiholNJ/iu6VAF/iL/uVx3jsiz7lsdlqdNLcaNdMxF2+Jd1s5bB/Zd2qOt70tmVcoyoUijiPq6F7SvPGNp7fLK69b5m322YBs4fOVbn/R8WppJTbkgkqmSKsD+1gOWzmwyMDzgp+unrZm71q5X28Dxv9tt6N70uLsUkUIo0iuiMFIADc80aH7uLd8sOygQ6L7RZf3ZVoqJeAweqmjlSynDyH+joK76RUdWtJsUTvLLP3nvda4ynD5aJ6VMPBL41wmp/puDN0FVWGVyONnlO79pPbXS8IOkYhuSX3EL3JA6Frrgrsj6vit9Fdlr967KnnzTnfuDkrEwFUgu4iJK/X/svFulxP/lj5qG6hkL5r7c2D/Yb82Od12+9runUkYS/MnIhbL1IkJf65Lz+ObR5A0cFJld/kXlhtR1fOS8H8eQYEL0FpnqaS3IoBGhVK9IHid0uT2+/CEAYcfQrHKJYQAAAABJRU5ErkJggg=="; var imgDisable = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAeJJREFUOMudk81qU1EUhb+7krYZaIkUhQQcqLVG30BKCyoOOtFROgiJZuxTXF/CcaEhhtyROCoO/C19BNOgM0mgk6IpGNN713WQUKMVU1yjczjrfJyz914Bf6hef5wbDn/clFTAFJVVAPTiOO4lSdKJouj7tD+Y3lQqletID7DPAwjwyakAjjLi5XajsX8KUK1W7xmvYTD0wR2hHgjjonAJVJjY95rN5s4JYHNz81o2m60BiWO/Kd0q7YZh6OnXhWGobvfTbfBdICNlnjca2/tBvV7PjYajJ4hF269brdZb/qFqpbpqfB84GgwGzzQajVaQFiUOkiT5wAwtryzvjb/IuXw+XxJQmJRqP4qiZBYgDENjdwDSlIKMixIEQabHGSWpB2DSooRSm/+SHaca00SaJMWzX3RxPBnqyXYfjKUb5XI5M7MGT0MBpQmor8PDwy7wFfvS3Nzc+ixA52NnVVJB0sCJO8G4t5WrhkeSbPv98XH8Lorav3WkXC5nFhZya3ayBmQcu9lqt7q/RrlSuWNYBwKkAxx34thfEGSz85eBEvbFiX232Wy+OhWmWq12JU3Th7bz0xHyZGX7mx2/aLfbn/+aRoCNjY2FpQtLK4gCdjE2QVb0YtPP5ea7W1tbw2n/Tyf84OJw4lGJAAAAAElFTkSuQmCC"; var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onclick="this.parentNode.menuClick(event)" onpopupshowing="this.parentNode.popupShowing()"> <menuitem class="menuitem-iconic" image={imgEnable} tooltiptext={strEnable} label="Adblock Plus" onclick={"document.getElementById('" + this.id + "').togglePreference(this.label)"}/> <menuitem class="menuitem-iconic" image={imgEnable} tooltiptext={strEnable} label="Config Descriptions" onclick={"document.getElementById('" + this.id + "').togglePreference(this.label)"}/> <menuitem class="menuitem-iconic" image={imgEnable} tooltiptext={strEnable} label="Enjoy Reading" onclick={"document.getElementById('" + this.id + "').togglePreference(this.label)"}/> </menupopup>; this.appendChild(custombuttonsUtils.makeXML(menu)); this.type = "menu"; this.orient = "horizontal"; this.menuClick = function(event) { event.preventDefault(); event.stopPropagation(); this.open = false; } //переключатель рисунков this.popupShowing = function() { var nodeList = this.getElementsByTagName("menuitem"); for (var i = 0; i < nodeList.length; i++) { var label = nodeList[i].getAttribute("label"); if (label == "Config Descriptions" || label == "Adblock Plus" || label == "Enjoy Reading") { if (prefBranch.getBoolPref(pref[label]) == true) { nodeList[i].setAttribute("image", imgEnable); nodeList[i].setAttribute("tooltiptext", strEnable); } else { nodeList[i].setAttribute("image", imgDisable); nodeList[i].setAttribute("tooltiptext", strDisable); } } } } //переключатель джетпаков this.togglePreference = function(label) { if (label == "Adblock Plus" ) { AddonManager.getAddonsByTypes(["extension"], function(addons) { for(var i = 0, l = addons.length; i < l; i++) if(addons[i].name == "Adblock Plus") { //Переключить джетпак addons[i].userDisabled = !addons[i].userDisabled; //создаем параметр "Jetpacks"в about:config и переключаем настройки custombuttons.setPrefs("Jetpacks", !addons [i]. userDisabled ); } }) } if (label == "Config Descriptions" ) { AddonManager.getAddonsByTypes(["extension"], function(addons) { for(var i = 0, l = addons.length; i < l; i++) if(addons[i].name == "Config Descriptions") { //Переключить джетпак addons[i].userDisabled = !addons[i].userDisabled; //создаем параметр "Jetpacks1"в about:config и переключаем настройки custombuttons.setPrefs("Jetpacks1", !addons [i]. userDisabled ); } }) } if (label == "Enjoy Reading" ) { AddonManager.getAddonsByTypes(["extension"], function(addons) { for(var i = 0, l = addons.length; i < l; i++) if(addons[i].name == "Enjoy Reading") { //Переключить джетпак addons[i].userDisabled = !addons[i].userDisabled; //создаем параметр "Jetpacks2"в about:config и переключаем настройки custombuttons.setPrefs("Jetpacks2", !addons [i]. userDisabled ); } }) } }
Отредактировано Andrey_Krropotkin (18-09-2012 19:24:57)
Отсутствует
Подскажите как можно оптимизировать этот код:
Самый простой вариант.
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" oncommand = "this.parentNode.toggleAddons(event.target.label)"> <menuitem label = "Adblock Plus" type = "checkbox"/> <menuitem label = "Config Descriptions" type = "checkbox"/> <menuitem label="Enjoy Reading" type = "checkbox"/> </menupopup>; var bool = XML.prettyPrinting; XML.prettyPrinting = false; var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement; XML.prettyPrinting = bool; this.appendChild(el); this.type = "menu"; this.orient = "horizontal"; //переключатель джетпаков this.toggleAddons = function(label) { AddonManager.getAddonsByTypes(["extension"], function(addons) { for( var i = 0, l = addons.length; i < l; i++) if ( addons[i].name == label ) addons[i].userDisabled = !addons[i].userDisabled; }) }; var nodeList = this.getElementsByTagName("menuitem"); AddonManager.getAddonsByTypes(["extension"], function(addons) { for( var i = 0, l = addons.length; i < l; i++) if ( !addons[i].userDisabled ) { var label = addons[i].name; if ( label == "Adblock Plus") nodeList[0].setAttribute("checked", true); if ( label == "Config Descriptions") nodeList[1].setAttribute("checked", true); if ( label == "Enjoy Reading") nodeList[2].setAttribute("checked", true); } })
Отредактировано bunda1 (19-09-2012 00:28:15)
Отсутствует
bunda1
У меня и такое начало работает, промахнуться маловероятно, но ведь это всё равно - не строка
var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onclick="this.parentNode.toggleAddons(event.target.label)"> <menuitem label="Adblock Plus"/> <menuitem label="Config Descriptions"/> <menuitem label="Enjoy Reading"/> </menupopup>; . . . . .
Отсутствует
Пунктам меню лучше назначать oncommand а не onclick – тогда можно будет и нажатием Enter вызвать, и нажать левую кнопку мыши на меню, «дотащить» до нужного пункта и отпустить только на нем.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Пунктам меню лучше назначать oncommand а не onclick – тогда можно будет и нажатием Enter вызвать, и нажать левую кнопку мыши на меню, «дотащить» до нужного пункта и отпустить только на нем.
Спасибо, я это не знал.
Как сделать что бы функция отдала addons[i].userDisabled
Services.console.logStringMessage('getEnable = ' + getEnable("Adblock Plus") ); function getEnable(label) { AddonManager.getAddonsByTypes(["extension"], function(addons) { for( var i = 0, l = addons.length; i < l; i++) if ( addons[i].name == label ) return addons[i].userDisabled; }) };
Добавлено 18-09-2012 22:55:13
bunda1
У меня и такое начало работает, промахнуться маловероятно, но ведь это всё равно - не строка
Да работает спасибо. Что-то я не догоняю, причем тут строка?
Отредактировано bunda1 (18-09-2012 22:55:13)
Отсутствует
Как сделать что бы функция отдала addons[i].userDisabled
Никак, это асинхронная функция.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Что-то я не догоняю, причем тут строка?
Э-э-э, ты посеял во мне сомнения , но посмотрел код Cookies Permissions (2012-08-17),
дак там XUL идёт именно строкой, полагаю - не просто так, всвязи с этим
Infocatcher, пожалуйста, скажи, такая запись «не строкой» всё ещё deprecated,
это отключат, или я что-то не так понял (что весьма вероятно)...
Отсутствует
такая запись «не строкой» всё ещё deprecated,
это отключат, или я что-то не так понял (что весьма вероятно)...
Тут ничего не поменялось. Возможность писать var xul = <menu>...</menu>; обещают отключить.
Более того, javascript.options.xml.content уже false в Nightly.
Не строкой можно через JXON, но там и парсер нужно самостоятельно делать, и все равно корявенько как-то смотрится.
дак там XUL идёт именно строкой, полагаю - не просто так, всвязи с этим
Да, все верно.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
OK, огромное спасибо за подтверждение, все сомнения развеяны,
жаль конечно, что они так упорствуют, но и «строкой» вроде не сложно...
И ждём (не скоро) массового «обвала» разных кнопок
Отсутствует
чтоб заранее подумать о замене.
Да там переписать не особо сложно. Только муторно – надо экранировать кавычки и обратные слэши и перекодировать специальные HTML/XML-символы.
И если пытаться автоматизировать, будет несколько избыточный код.
(как я понял в СМ они тоже сдохнут,не?)
Движок-то тот же самый.
Но пока что в Nightly только для страниц отключили.
насколько реально эту фичу засунуть в само дополнение СВ?
Написать на JavaScript парсер JavaScript? Это и нетривиально, и тормозить же будет.
или соорудить какойто костыль которым можно легко исправить поломавшуюся кнопку.
Простой не получится, для простого нужен полноценный разбор синтаксиса.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Тут ничего не поменялось. Возможность писать var xul = <menu>...</menu>; обещают отключить.
Более того, javascript.options.xml.content уже false в Nightly.
А такое меню будет работать?
// Создать меню ............................................................................................ menuPopup = document.getElementById("mainPopupSet").appendChild(document.createElement("menupopup")); menuPopup.setAttribute("id", "fileAndFolders-popup"); // добавляем массив с данными для создание меню .... var lst = [ { label:"Profile", image:"chrome://mozapps/skin/profile/profileicon.png", value:"ProfD", command:OpenFirefoxFolder }, { label:"Firefox", image:"chrome://branding/content/icon16.png", value:"CurProcD", command:OpenFirefoxFolder }, { label:"Download", image:"chrome://mozapps/skin/downloads/downloadIcon.png", command:OpenDownloadFolder }, { label:"separator" }, { label:"Extensions", image:"chrome://mozapps/skin/extensions/extensionGeneric-16.png", value:"ProfD,extensions", command:OpenFirefoxFolder, }, { label:"Custom buttons", image:"chrome://custombuttons/skin/cbicon.png", value:"ProfD,custombuttons", command:OpenFirefoxFolder, }, { label:"Bookmark backups", image:"chrome://custombuttons/skin/button.png", value:"ProfD,bookmarkbackups", command:OpenFirefoxFolder, }, { label:"Search plugins(default)", style:"list-style-image:url('chrome://global/skin/icons/Search-glass.png')!important; -moz-image-region: rect(0, 16px, 16px, 0) !important;", value:"CurProcD,searchplugins", command:OpenFirefoxFolder, }, { label:"Search plugins(user-defined)", style:"list-style-image:url('chrome://global/skin/icons/Search-glass.png')!important; -moz-image-region: rect(0, 16px, 16px, 0) !important;", value:"UsrSrchPlugns", command:OpenFirefoxFolder, }, { label:"separator" }, { label:"Chrome", style:"list-style-image:url('chrome://global/skin/icons/folder-item.png')!important; -moz-image-region: rect(0, 32px, 16px, 16px) !important;", value:"UChrm", command:OpenFirefoxFolder, }, { label:"userChrome.css", style:"list-style-image:url('chrome://global/skin/icons/folder-item.png')!important; -moz-image-region: rect(0, 16px, 16px, 0) !important;", value:"ProfD,chrome,userChrome.css", command:OpenFirefoxFolder, }, { label:"userContent.css", style:"list-style-image:url('chrome://global/skin/icons/folder-item.png')!important; -moz-image-region: rect(0, 16px, 16px, 0) !important;", value:"ProfD,chrome,userContent.css", command:OpenFirefoxFolder, }, ]; // цикл по очереди добавляет из массива 'lst' нужные атрибуты к пунктам меню .... for( var i = 0, m; m = lst[i]; i++) { var menuItem = document.createElement("menuitem"); menuItem.setAttribute("label", m.label); menuItem.setAttribute("class", "menuitem-iconic"); if ("image" in m) menuItem.setAttribute("image", m.image); if ("style" in m) menuItem.setAttribute("style", m.style); if (m.label == "separator") menuItem = document.createElement("menuseparator"); if ("value" in m) menuItem.setAttribute("value", m.value); menuItem.addEventListener("command", m.command, false); // не добавляете цекбоксы к пункту если уже добавлен "image" .... //if ("checked" in m) menuItem.setAttribute("type", "checkbox"); //if ("checked" in m) menuItem.setAttribute("checked", m.checked); //menuItem.id = "menuItem-" + m.label.toString(); menuPopup.appendChild(menuItem); }; // Функция открывает папки и файлы Firefox, выбор завысит от параметра 'value' для функции .................. function OpenFirefoxFolder(event) { // получаем 'value' от нажатого пункта в меню .... var menuitem = event.target; var value = menuitem.getAttribute("value"); // создаем массив из слов в 'value' и получаем названия нужных папок и файлов .... var array = value.split(","); var directory = array[0]; var folders = (array[1])? array[1]: false; var file = (array[2])? array[2]: false; // указать нужный каталог .... var dir = Components.classes['@mozilla.org/file/directory_service;1'] .getService(Components.interfaces.nsIProperties) .get(directory, Components.interfaces.nsILocalFile); // указать нужную подпапку если она записана в 'value' .... if (folders) dir.append( folders ); // указать нужный файл если он записан в 'value' и открыть файл .... if (file) dir.append( file ), dir.launch(); // открыть папку если в 'value' не записан файл .... if (dir.exists() && !file ) dir.reveal(); }; // Функция открывает папку загрузки Firefox если папка существует ........................................... function OpenDownloadFolder() { // получить папку загрузки из 'about:config' .... var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService); var dir = prefs.getComplexValue("browser.download.dir", Components.interfaces.nsISupportsString).data; // открыть папку .... var local = Components.classes["@mozilla.org/file/local;1"]. createInstance(Components.interfaces.nsILocalFile); local.initWithPath( dir ); local.launch(); }; // Настройка функций кликов мыши(Mouse Click settings) ...................................................... this.onclick = function(event) { // действие при клике ЛКМ .... if ( event.button == 0 ) { // открыть меню .... document.getElementById("fileAndFolders-popup").showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); }; } //this.type = "menu";
Отсутствует
А такое меню будет работать?
Будет.
а уже есть какая нибудь ночнушка где всё это уже отключено и выкинуто - чтоб проверить какие кнопки не будут работать и решить как с этим бороться?
Есть. Вроде, уже и в Aurora (или как там называется) есть.
Надо выставить javascript.options.xml.chrome и javascript.options.xml.content в false.
Писать инструкцию пока лень (да и некогда, в общем).
Вот некий конвертер: convertE4X.js
Правда, особо не тестировал.
Добавлено 19-09-2012 22:23:23
Только надо понимать, что в сложных случаях ничего не выйдет.
Отредактировано Infocatcher (19-09-2012 22:23:23)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
чтото типа ФАКа с примерами какого типа куски кода нужно переделывать и каким образом.
Черновой вариант: http://forum.mozilla-russia.org/viewtop … pid=582620
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
О! Вижу кнопку-«ремонтник» и FAQ, такой подробный, больше половины - даже не знал, что такое бывает,
очень здо́рово, Infocatcher - спасибо !
Вот, ещё сделал себе кнопку, чтоб на chrome window в DOM Inspector'е быстренько поглядеть,
ну или другой какой объект, открывает как «исследовать в новом окне» и как «JavaScript Object»,
может кому пригодится... Да, и XUL там, поскольку простой, лежит как «первый многострочный комментарий»,
так что - правим под себя, экранирование пока не требуется.
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%3ED%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADyeFz/8nhc//J4XP/yeFz/8nhc//J4XP/yeFz/8nhc//J4XN/yeFyf8nhcQAAAAAAAAAAAAAAAAAAAAAAAAAAA8nhc//V+Z//1mYT/9ZmE//WZhP/1mYT/8IZu/+t0V//wdlv/8nhc//J4XP/yeFyv8nhcEAAAAAAAAAAAAAAAAPJ4XP/1l4T//9TU///U1P//1NT//9TU///U1P//1NT//9TU//Cvnv/wdFn/8nhc//J4XM/yeFwQAAAAAAAAAADyeFz/8pOA///U1P//1NT//9TU///U1P/Ue3v//9TU///U1P//1NT//9TU//CQeP/yeFz/8nhczwAAAAAAAAAA8nhc//CQff//1NT//9TU///U1P/Ue3v/1Ht7/9R7e///1NT//9TU///U1P//1NT/8H5l//J4XP/yeFxgAAAAAPJ4XP/1lYL//9TU///U1P/Ue3v/1Ht7/9R7e//Ue3v/1Ht7///U1P//1NT//9TU///U1P/yeFz/8nhcvwAAAADyeFz/9ZmE///U1P/Ue3v/1Ht7/9R7e//Ue3v/1Ht7/9R7e//Ue3v//9TU///U1P//1NT/8HRZ//J4XP8AAAAA8nhc//WZhP//1NT//9TU///U1P//1NT//9TU///U1P//1NT//9TU///U1P//1NT//9TU//B+Zf/yeFz/AAAAAPJ4XP/1mYT//9TU///U1P//1NT//9TU/9R7e///1NT//9TU///U1P//1NT//9TU///U1P/whm7/8nhc/wAAAADyeFz/9ZmE///U1P//1NT//9TU/9R7e//Ue3v/1Ht7///U1P//1NT//9TU///U1P//1NT/8HRZ//J4XP8AAAAA8nhc//WZhP//1NT//9TU/9R7e//Ue3v/1Ht7/9R7e//Ue3v//9TU///U1P//1NT//9TU//J4XP/yeFzPAAAAAPJ4XP/1mYT//9TU/9R7e//Ue3v/1Ht7/9R7e//Ue3v/1Ht7/9R7e///1NT//9TU/+17Yf/yeFz/8nhcYAAAAADyeFz/9ZmE///U1P//1NT//9TU///U1P//1NT//9TU///U1P//1NT//9TU/+2KdP/yeFz/8nhczwAAAAAAAAAA8nhc//WZhP//1NT//9TU///U1P//1NT//9TU///U1P//1NT/8K+e//B0Wf/yeFz/8nhcz/J4XBAAAAAAAAAAAPJ4XP/1fmf/9ZmE//WZhP/1mYT/9ZmE//CGbv/rdFf/8HZb//J4XP/yeFz/8nhcv/J4XBAAAAAAAAAAAAAAAADyeFz/8nhc//J4XP/yeFz/8nhc//J4XP/yeFz/8nhc//J4XN/yeFyf8nhcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+sQQAHrEEAA6xBAAOsQQABrEEAAaxBAAGsQQABrEEAAaxBAAGsQQABrEEAAaxBAAOsQQADrEEAB6xBAB+sQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*%0A%0A%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09oncommand%3D%22this.parentNode.openObject%28event.target.label%2Cevent.target.getAttribute%28%27obj%27%29%29%22%3E%0A%0A%3Cmenuitem%20label%3D%22window%22%20obj%3D%22window%22/%3E%0A%3Cmenuitem%20label%3D%22document%22%20obj%3D%22document%22/%3E%0A%3Cmenuitem%20label%3D%22gBrowser%22%20obj%3D%22gBrowser%22/%3E%0A%0A%3Cmenuseparator/%3E%0A%0A%3Cmenuitem%20label%3D%22content%22%20obj%3D%22content%22/%3E%0A%3Cmenuitem%20label%3D%22document%22%20obj%3D%22content.document%22/%3E%0A%0A%3C/menupopup%3E%3B%0A%0A*/%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Aconst%20comm%20%3D%20this.getAttribute%28%22cb-init%22%29.match%28/%5C/%5C*%5B%5Cs%5CS%5D+%5C*%5C//%29%5B0%5D%3B%0Aconst%20xul%20%3D%20comm.substring%28comm.indexOf%28%22%3C%22%29%2C%20comm.lastIndexOf%28%22%3E%22%29+1%29%0A%09%09.replace%28/%3E%5Cs+%3C/g%2C%20%22%3E%3C%22%29%3B%0Avar%20menu%20%3D%20%28new%20DOMParser%28%29%29.parseFromString%28xul%2C%20%22application/xml%22%29.documentElement%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.appendChild%28menu%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0A%0Athis.openObject%20%3D%20function%28label%2C%20obj%29%20%7B%0A%0A%09var%20win%20%3D%20window.openDialog%28%22chrome%3A//inspector/content/object.xul%22%2C%0A%09%09%09%22_blank%22%2C%20%22chrome%2Call%2Cdialog%3Dno%22%2C%0A%09%09%09%20eval%28obj%29.wrappedJSObject%20%7C%7C%20eval%28obj%29%29%3B%0A%0A%09win.onload%20%3D%20function%28e%29%20%7B%0A%0A%09%09var%20doc%20%3D%20e.target%3B%0A%09%09doc.title%20+%3D%20%22%20%20-%20%20%22%20+%20label%3B%0A%09%09var%20panel%20%3D%20doc.getElementsByTagName%28%22domi-panel%22%29%5B0%5D%3B%0A%0A%09%09function%20showAsJSO%28%29%20%7B%0A%09%09%09if%20%28panel.registry%29%20%7B%20panel.switchViewer%287%29%3B%20return%3B%20%7D%0A%09%09%09window.setTimeout%28showAsJSO%2C%2010%29%3B%20%7D%0A%09%09showAsJSO%28%29%3B%0A%09%7D%0A%7D%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20thisCB%20%3D%20this%3B%0Afunction%20dm%28%29%20%7B%20return%20document.getAnonymousElementByAttribute%28%0A%09%09thisCB%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%20%7D%0A%09%09%09%0Afunction%20hdm%28%29%20%7B%20if%20%28dm%28%29%29%20%7B%20dm%28%29.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%20return%20%7D%0A%09%09window.setTimeout%28hdm%2C%2010%29%3B%20%7D%0Ahdm%28%29%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
практически на любом элементе интерфейса или страницы
Вот-вот, но мне Attributes Inspector для этого дела нравится.
А кнопка совсем не об этом. Это типа «закладки для "любимых" объектов»,
которые в два клика никак не откроешь. Но на её полезности, разумеется, не настаиваю
Отсутствует
кнопке скрытия меню - в СМ иногда меню двоится
Странно, что иногда.
У меня вообще получалось, что в SM чаще происходит повторная инициализация.
Можно попробовать так:
this.initBtn = function() { if(mPopup.hasChildNodes()) mPopup.textContent = ""; var mBarItems = bar.childNodes; bar.setAttribute('collapsed','true'); for(i=0;i<mBarItems.length;i++) { if(mBarItems[i].nodeName == 'menu') { var mBarClone = mBarItems[i].cloneNode(true); mPopup.appendChild(mBarClone); } } }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует