Dumby
Страницу 73 прочёл и это интересно. Но что может вдруг сохранить ссылку на документ в данном случае не понял, вроде ничего не должно.
Но теперь о другом, есть код который у кнопки открывает меню с установленными поисковиками как в строке поиска и даёт возможность через это меню переключить текущий поисковик. Не мог бы ты добавить в это меню пункт Добавить поисковик... как в стандартном меню в строке поиска, ну который даёт возможность добавить поисковик с текущего сайта. Я сам пытался, но не получается, у пункта нет Id и команды или функции для запуска.
// Добавить контекстное меню с поисковиками для кнопки ...................................... function searchService() { return Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService); } this.selectEngine = function(aNode, aEvent) { var engine = aEvent.target.engine; var ss = searchService(); ss.currentEngine = ss.getEngineByName(engine.name); aNode.engine = engine; aNode.image = aEvent.target.getAttribute("src"); } this.populateMenu = function(aNode) { var ss = searchService(); var engines = ss.getVisibleEngines({ }); const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; while( aNode.firstChild && aNode.firstChild.localName != "menuseparator" ) { aNode.removeChild( aNode.firstChild ); } for ( var i = engines.length - 1; i >= 0; i--) { var mi = document.createElementNS(kXULNS, "menuitem"); mi.id = "cb-search-" + engines[i].name; mi.className = "menuitem-iconic searchbar-engine-menuitem"; mi.setAttribute("label", engines[i].name); if ( engines[i].iconURI ) mi.setAttribute("src", engines[i].iconURI.spec); mi.engine = engines[i]; if ( mi.engine == ss.currentEngine ) mi.style.fontWeight = "bold"; mi.setAttribute("onclick", "event.preventDefault(); event.stopPropagation(); parentNode.parentNode.selectEngine(parentNode.parentNode, event)"); aNode.insertBefore(mi, aNode.firstChild); } } this.currentEngine = searchService().currentEngine; var ss = searchService(); this.engine = ss.currentEngine; this.image = this.engine.iconURI.spec; var mp = this.appendChild( document.createElement("menupopup") ); mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)"); mp.setAttribute("oncommand", "event.stopPropagation()"); var managerSeparator = mp.appendChild( document.createElement("menuseparator") ); managerSeparator.id = "cb-searchbutton-separator" var managerItem = mp.appendChild( document.createElement("menuitem") ); managerItem.setAttribute("label", "Управление поисковыми системами…"); managerItem.setAttribute("oncommand", "openDialog('chrome://browser/content/search/engineManager.xul', " + "'engineManager', 'chrome, dialog=no')"); this.type = "menu-button";
Отсутствует
okkamas_knife
Есть бот. Берет инфу из текстового файла и раскидывает ее по полям ввода страницы чужого сайта. Эти поля находятся на разных страницах/формах. Для перехода между страницами/формами бот имитирует click'и на кнопках. Соответственно, после каждого click'а требуется определение завершения операции загрузки новой страницы/формы (временные задержки могут быть разными). Вопрос в том как сделать эту проверку. В цикле с таймером нельзя.. Логично использовать цикл в котором создается самозакрывающееся модальное окно
Отсутствует
Не мог бы ты добавить в это меню пункт Добавить поисковик...
Ох, даже незнаю, если хоть немного работает, попробуй доделать...
// Добавить контекстное меню с поисковиками для кнопки ...................................... function searchService() { return Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService); } _a = searchService(); this.selectEngine = function(aNode, aEvent) { var engine = aEvent.target.engine; var ss = searchService(); ss.currentEngine = ss.getEngineByName(engine.name); aNode.engine = engine; aNode.image = aEvent.target.getAttribute("src"); } this.populateMenu = function(aNode) { var ss = searchService(); var engines = ss.getVisibleEngines({ }); const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; //---------------------------------------------------------------------------------- // while( aNode.firstChild && aNode.firstChild.localName != "menuseparator" ) { while( aNode.firstChild && aNode.firstChild != managerSeparator ) { //---------------------------------------------------------------------------------- aNode.removeChild( aNode.firstChild ); } for ( var i = engines.length - 1; i >= 0; i--) { var mi = document.createElementNS(kXULNS, "menuitem"); mi.id = "cb-search-" + engines[i].name; mi.className = "menuitem-iconic searchbar-engine-menuitem"; mi.setAttribute("label", engines[i].name); if ( engines[i].iconURI ) mi.setAttribute("src", engines[i].iconURI.spec); mi.engine = engines[i]; if ( mi.engine == ss.currentEngine ) mi.style.fontWeight = "bold"; mi.setAttribute("onclick", "event.preventDefault(); event.stopPropagation(); parentNode.parentNode.selectEngine(parentNode.parentNode, event)"); aNode.insertBefore(mi, aNode.firstChild); } //------------------------------------------------------------------------------ var engines = gBrowser.mCurrentBrowser.engines; if (!(engines && engines.length)) return; var sep = document.createElement("menuseparator"); sep.id = "cb-search-addengine-separator"; aNode.insertBefore(sep, managerSeparator); for (var i = 0; i < engines.length; i++) { var engine = engines[i]; var menuitem = document.createElement("menuitem"); menuitem.setAttribute("id", "cb-search-addengine-engine-" + (i + 1)); menuitem.setAttribute("class", "menuitem-iconic addengine-item"); menuitem.setAttribute("tooltiptext", engine.uri); menuitem.setAttribute("uri", engine.uri); menuitem.setAttribute("title", engine.title); menuitem.setAttribute("label", "Добавить «" + engine.title + "»"); if (engine.icon) menuitem.setAttribute("src", engine.icon); var command = '\ \ Cc["@mozilla.org/browser/search-service;1"]\ .getService(Ci.nsIBrowserSearchService)\ .addEngine(\ event.originalTarget.getAttribute("uri"), \ Ci.nsISearchEngine.DATA_XML, \ event.originalTarget.getAttribute("src"), \ true);' menuitem.setAttribute("oncommand", command); aNode.insertBefore(menuitem, managerSeparator); } //------------------------------------------------------------------------------ } this.currentEngine = searchService().currentEngine; var ss = searchService(); this.engine = ss.currentEngine; this.image = this.engine.iconURI.spec; var mp = this.appendChild( document.createElement("menupopup") ); mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)"); mp.setAttribute("oncommand", "event.stopPropagation()"); var managerSeparator = mp.appendChild( document.createElement("menuseparator") ); managerSeparator.id = "cb-searchbutton-separator" var managerItem = mp.appendChild( document.createElement("menuitem") ); managerItem.setAttribute("label", "Управление поисковыми системами…"); managerItem.setAttribute("oncommand", "openDialog('chrome://browser/content/search/engineManager.xul', " + "'engineManager', 'chrome, dialog=no')"); this.type = "menu-button";
P.S Кстати, как там с этим, любопытно же
Отредактировано Dumby (17-01-2013 06:14:26)
Отсутствует
Хочу снова пожаловаться на Windows-Блокнот
Ожидаются ли какие-нибудь негативные последствия такого вмешательства,
или можно так оставить ?
Да никаких, если только какие-нибудь текстовые редакторы на других операционных системах принципиально не хотят воспринимать формат новой строки, принятый в Windows.
Подправил.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Хотя нет, еще могут быть переводы строк в знаниях атрибутов, так что лучше так.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Спасибо.
return this.appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
что-то у меня на десятке какая-то нездоровая разница наблюдается.
Отсутствует
Dumby
Кто-то ранее запросил у Components.classes["@mozilla.org/xre/app-info;1"] интерфейс nsIXULRuntime.
Вот так, например:
var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo) .QueryInterface(Components.interfaces.nsIXULRuntime)
А так все соответствует, вроде:
nsIXULAppInfo + nsIXULAppInfo.idl
nsIXULRuntime + nsIXULRuntime.idl
Только вот документацию не обновили.
Добавлено 17-01-2013 18:37:36
А, ну и nsICrashReporter еще, там же написано все.
Отредактировано Infocatcher (17-01-2013 18:37:36)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Ох, даже незнаю, если хоть немного работает, попробуй доделать
Спасибо работает
Но работает только если строка поиска находится на панели ну да ладно поиск можно скрыть через Css.
Добавлено 17-01-2013 21:49:57
P.S Кстати, как там с этим, любопытно же
А вот с этим плохо, не помогло. Мистика какая то с этими кириллическими доменами на XP:
[InternetShortcut] URL=http://:B>.@D/ IDList= HotKey=0 IconFile=C:\Documents and Settings\d�鲲
Kнопкой-
[InternetShortcut] URL=http://лі®.сІЌ [InternetShortcut.A] URL=http://лі®.сІЌ [InternetShortcut.W] URL=http://+BDoEQgQ+-.+BEAERA-/
Если перенести текст из ярлыка который создавался используя Internet Explorer 7 в ярлык от FF то он тоже прекрасно открывается но непонятно как создать такой ярлык с правильным текстом используя CB кнопку.
Отредактировано bunda1 (17-01-2013 22:04:07)
Отсутствует
Dumby
Хорошо что ты спросил. С 'Punycode' ярлыки все таки открывает кириллические домены, похоже что у меня профиль сломан, извиняюсь
Отсюда мораль, что надо быть осторожней с Red Bull и коктейлями
Отредактировано bunda1 (17-01-2013 22:54:54)
Отсутствует
По примеру переноса кнопки раширения noscript из панели дополнений в urlbar
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
кнопка переместилась в urlbar, вроде все нормально, но возник маленький косяк, при удалении, добавлении любой кнопки в навигационной панели, кнопка из urlbara самопроизвольно перемещается аж в окно настройки панелей инструментов, приходится всякий раз ее возвращать. Может кто глянет код кнопки, что с ним не так.
Я проверил этот код на FF18 и таково глюка не заметил, не понятно в чем тут дело. Наверно тут глючит другой код.
Код перемещает кнопку рядом с иконками в адресной строке может при удалении, добавлении любой кнопки в навигационной панели, иконки с адресной строки тоже перемещаются и custombuttons-button92 вместе с ними.
Отсутствует
okkamas_knife
Никак не разберусь что в этом коде куда подставлять,
function movetostatusbar(){this_.classList.remove("toolbarbutton-1");
document.getElementById("statusbar-display").appendChild(this_);
}
setTimeout(movetostatusbar, 500);
bunda1
У меня перемещает вот так и глючит, других иконок в адресной строке у меня нет.
http://s54.radikal.ru/i145/1301/01/216a5f14f647.jpg
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
villa7
На крайний случай можно на прямую создать кнопку в адресной строке. Я так понимаю что кнопки масштаба и памяти не перемещаются произвольно. Что делает та кнопка которая глючит.
Отсутствует
bunda1
Кнопки масштаба и памяти всегда на месте, перемещается только кнопка
Искать текст из адресной строки
Эту кнопку не так просто создать в адресной строке.
Попробуй переместить свой код перед кодом создающим кнопку масштаба в ту кнопку где он находится + рестарт.
Отсутствует
bunda1
Попробовал переместить перед кодом масштаба, теперь переместилась вот так
http://s019.radikal.ru/i637/1301/5d/c6cb1fc432d0.jpg
но все равно если перемещать другие кнопки то кнопка из адресной строки самопроизвольно перемещается. Ладно, пусть так остается, не так уж часто я кнопки перемещаю, буду вытаскивать каждый раз, не переломлюсь. Всем спасибо за участие и помощь.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
ну вот же
закидывай в инициализацию
Ложил код в инициализацию кнопки которую нужно переместить, кнопку вытаскивал и в панель дополнений и в навигационную, кнопка перемещается, но неизвестно куда, ее нигде не видно. Наверно у меня что-то мешает.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
okkamas_knife
Создал кнопку только с кодом перемещения на чистом профиле, в urlbar перемещается, но после перезагрузки браузера пропадает, появляется опять в urlbar только после вызова настройки панелей инструментов, и так до следующей перезагрузки браузера. Ладно пусть будет как есть, переживем, спасибо за советы.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Может кто посмотреть и проверить - что-то эта кнопка сохранения в MHT (с помощью MAFF) в 17.0.2 ESR не фурычит... ничего вообще не происходит.
var settypearc=1;// 1-mht 5-maf custombuttons.setPrefs("extensions.maf.current.save.filterindex", settypearc); mafSaveDocument(getBrowser().selectedBrowser.contentDocument,{mafAskSaveArchive: true})
MAFF последний.
Отредактировано WatsonRus (20-01-2013 22:48:20)
Firefox ESR
Отсутствует
WatsonRus
А если так ?
const archiveType = 1; // 1-mht, 0-maff. custombuttons.setPrefs("extensions.maf.current.save.filterindex", archiveType); MafCommandsOverlay.savePageInArchive();
Отсутствует
Можно ли создать кнопку, единственной функцией которой будет эмулирование нажатия горячей клавиши (например Shift+Ctrl+F12) ? Если да - не отказался бы от примера кода.
Кнопка нужна в дополнение к дополнению Shelve - для выполнения профиля сохранения страничек можно выбрать горячую клавишу, но раскорячивать пальцы на клаве не хочется, single-click кнопка удобнее.
спасибо
Отсутствует
laprad
смотрим какая функция вызывается по тому хоткею и закидываем её в кнопку
предлагаешь проанализировать код Shelve? моих знаний не хватит. честно говоря я думал одной строчкой кода обойдется
Отсутствует