Случайно увидел, что в custombuttons-0.0.4.6-20100105 добавлена поддержка Симанки 2.
Только что поставил в SeaMonkey 2.0.2
В окне настроек не срабатывают кнопки OK и Cancel.
Первый раз такое вижу.
Отсутствует
В окне настроек не срабатывают кнопки OK и Cancel.
Консоль:
Ошибка: cbPrefs is undefined
Источник: chrome://custombuttons/content/prefs.xul
Строка: 1
chrome://custombuttons/content/prefs.js:
chrome://custombuttons/content/cbfactory.js:
function custombuttonsFactory () { var retobj = null; var info = Components. classes ["@mozilla.org/xre/app-info;1"]. getService (Components. interfaces. nsIXULAppInfo); switch (info. name) { ... case "SeaMonkey": switch (document. documentURI) { case "chrome://navigator/content/navigator.xul": retobj = this. CustombuttonsSTFactory; break; case "chrome://messenger/content/messenger.xul": retobj = this. CustombuttonsTBFactory; break; case "chrome://messenger/content/messageWindow.xul": retobj = this. CustombuttonsTBMWFactory; break; case "chrome://messenger/content/messengercompose/messengercompose.xul": retobj = this. CustombuttonsTBMCFactory; break; case "chrome://messenger/content/addressbook/addressbook.xul": break; case "chrome://chatzilla/content/chatzilla.xul": break; } break; ... } return retobj; }
Я так понимаю, что нужно добавить default в switch(document. documentURI). Но что именно там нужно возвращать, вникать в данный момент некогда...
Отредактировано Infocatcher (18-01-2010 19:23:13)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife
попробуй в настройках расширения поставить галку - показывать кнопку Применить
тогда если она заработает
И как же она заработает, если окей в настройках её не применяет?
а вообще на всякий случай продублируй антону про баг
Так он и здесь увидит, наверное.
Infocatcher
Да мне-то не к спеху, кнопки к панели прилипают, парочка срабатывает, смотрю.
Отсутствует
А кто может создать кнопку "Перейти"?
в 3.5 кнопку забрали, а та что есть не всегда подходит
т.е. кнопка при нажатии на которую происходит переход по ссылке в адресной строке, либо обновление страницы если ссылка уже была загружена.
Отсутствует
А кто может создать кнопку "Перейти"?
Код для секции «инициализация»:
this.setAttribute( "onclick", "handleURLBarCommand" in window ? "handleURLBarCommand(event);" // Firefox 3.0 : "gURLBar.handleCommand(event);" // Firefox 3.5+ ); this.tooltipText = document.getElementById("go-button").tooltipText;
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
vladmir
В окне настроек не срабатывают кнопки OK и Cancel.
Спасибо за сообщение об ошибке. Совсем забыл это протестировать.
В следующей версии исправлю.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Подскажите плиз. Версия ThunderBird - 2, версия кастом баттонс -0,0,4,3
Какую функцию вызвать, чтобы при нажатии на кнопку, размещенную на панели инструментов в диалоге создания письма, курсор ввода оказался в поле "Subject". Спасибо.
Отсутствует
Anton
А ты, кстати, как-то тихой сапой добавил поддержку Симанки - надо было погромогласнее что ли. ))
Сограждане, а вот така нужда есть давно, - как бы забацать такой скриптик, чтобы он в адресной строке производил поиск и замену - преобразовывал бы адрес открытой страницы в вид, более удобный для имени файла при сохранении страницы. Сейчас я часто делаю это вручную - слэши меняю на дефисы, от com оставляю c, удаляю типичные части типа viewtopic.php, ну потом иногда дописываю что-то. То есть использую адр строку как текстовый редактор для составления имени файла. Потом копирую и вставляю в окно сохранения.
В итоге, многие страницы у меня с такими именами лежат:
livejournal.c-community-firefoxusers.htm
custombuttons.mozdev.org-drupal-content-custom-buttons.htm
mozilla.org-projects-calendar-lightning.htm
Если получится, то я додумаю ещё какие знакосочетания нужно менять или удалять, а для начала бы:
- замена / \ на -
- замена com на c
- замена .shtml на .html
- замена .phtml на .html
- удалить протоколы http:// https:// ftp://
- удалить www.
- удалить ?
- удалить %
- удалить topic.cgi
- удалить viewtopic.php
- если слэш в самом конце - то удаление его
Мне было бы полезно даже, если будет только замена слэшей на чёрточки.
Я было пытался начать букмарклет делать (точнее переделать из других) но во-первых, не получилось, во-вторых, протокол не удаляется, да ещё при настройке для закладок открывать в новой вкладке - всё равно бессмысленно - ничего не преобразуется, а только открывается новая вкладка, так может кнопарик такого типа можно сделать?
Отсутствует
mshubin
Какую функцию вызвать, чтобы при нажатии на кнопку, размещенную на панели инструментов в диалоге создания письма, курсор ввода оказался в поле "Subject".
vladmir
Если делать замены в строку адреса то код примерно такой:
var url = gBrowser. contentDocument. location. href; var urlbar = document. getElementById ("urlbar"); url = url. replace (/^([^:/?#]+:\/\/)?/, ""); url = url. replace (/^www\./, ""); url = url. replace (/\//g, "-"); url = url. replace (/\\/g, "-"); url = url. replace (/\?/g, ""); url = url. replace (/%/g, ""); url = url. replace (".com", "c"); url = url. replace (".shtml", ".html"); url = url. replace (".phtml", ".html"); url = url. replace ("topic.cgi", ""); url = url. replace ("viewtopic.php", ""); urlbar. value = url;
Можно записывать результат в буфер обмена - надо заменить последнюю строку предыдущего кода на
Можно даже
3 вызвать диалог сохранения передав ему исправленный адрес в качестве имени файла
выдернув и поправив пару функций из contentAreaUtils.js, код будет такой:
/*CODE*/ function internalSave(aURL, aDocument, aDefaultFileName, aContentDisposition, aContentType, aShouldBypassCache, aFilePickerTitleKey, aChosenData, aReferrer, aUsePref, aCacheKey) { // Note: aDocument == null when this code is used by save-link-as... var saveMode = GetSaveModeForContentType(aContentType); var isDocument = aDocument != null && saveMode != SAVEMODE_FILEONLY; var saveAsType = kSaveAsType_Complete; var file, fileURL; // Find the URI object for aURL and the FileName/Extension to use when saving. // FileName/Extension will be ignored if aChosenData supplied. var fileInfo = new FileInfo(aDefaultFileName); if (aChosenData) file = aChosenData.file; else { var charset = null; if (aDocument) charset = aDocument.characterSet; else if (aReferrer) charset = aReferrer.originCharset; initFileInfo(fileInfo, aURL, charset, aDocument, aContentType, aContentDisposition); fileInfo. fileName = fileInfo. fileBaseName = aDefaultFileName; var fpParams = { fpTitleKey: aFilePickerTitleKey, isDocument: isDocument, fileInfo: fileInfo, contentType: aContentType, saveMode: saveMode, saveAsType: saveAsType, file: file, fileURL: fileURL }; if (!getTargetFile(fpParams)) // If the method returned false this is because the user cancelled from // the save file picker dialog. return; saveAsType = fpParams.saveAsType; saveMode = fpParams.saveMode; file = fpParams.file; fileURL = fpParams.fileURL; } if (!fileURL) fileURL = makeFileURI(file); // XXX We depend on the following holding true in appendFiltersForContentType(): // If we should save as a complete page, the saveAsType is kSaveAsType_Complete. // If we should save as text, the saveAsType is kSaveAsType_Text. var useSaveDocument = isDocument && (((saveMode & SAVEMODE_COMPLETE_DOM) && (saveAsType == kSaveAsType_Complete)) || ((saveMode & SAVEMODE_COMPLETE_TEXT) && (saveAsType == kSaveAsType_Text))); // If we're saving a document, and are saving either in complete mode or // as converted text, pass the document to the web browser persist component. // If we're just saving the HTML (second option in the list), send only the URI. var source = useSaveDocument ? aDocument : fileInfo.uri; var persistArgs = { source : source, contentType : (!aChosenData && useSaveDocument && saveAsType == kSaveAsType_Text) ? "text/plain" : null, target : fileURL, postData : isDocument ? getPostData(aDocument) : null, bypassCache : aShouldBypassCache }; var persist = makeWebBrowserPersist(); // Calculate persist flags. const nsIWBP = Components.interfaces.nsIWebBrowserPersist; const flags = nsIWBP.PERSIST_FLAGS_REPLACE_EXISTING_FILES; if (aShouldBypassCache) persist.persistFlags = flags | nsIWBP.PERSIST_FLAGS_BYPASS_CACHE; else persist.persistFlags = flags | nsIWBP.PERSIST_FLAGS_FROM_CACHE; // Leave it to WebBrowserPersist to discover the encoding type (or lack thereof): persist.persistFlags |= nsIWBP.PERSIST_FLAGS_AUTODETECT_APPLY_CONVERSION; // Create download and initiate it (below) var tr = Components.classes["@mozilla.org/transfer;1"].createInstance(Components.interfaces.nsITransfer); if (useSaveDocument) { // Saving a Document, not a URI: var filesFolder = null; if (persistArgs.contentType != "text/plain") { // Create the local directory into which to save associated files. filesFolder = file.clone(); var nameWithoutExtension = getFileBaseName(filesFolder.leafName); filesFolder.leafName = document.getElementById("contentAreaCommandsBundle") .getFormattedString("filesFolder", [nameWithoutExtension]); } var encodingFlags = 0; if (persistArgs.contentType == "text/plain") { encodingFlags |= nsIWBP.ENCODE_FLAGS_FORMATTED; encodingFlags |= nsIWBP.ENCODE_FLAGS_ABSOLUTE_LINKS; encodingFlags |= nsIWBP.ENCODE_FLAGS_NOFRAMES_CONTENT; } else { encodingFlags |= nsIWBP.ENCODE_FLAGS_ENCODE_BASIC_ENTITIES; } const kWrapColumn = 80; tr.init((aChosenData ? aChosenData.uri : fileInfo.uri), persistArgs.target, "", null, null, null, persist); persist.progressListener = new DownloadListener(window, tr); persist.saveDocument(persistArgs.source, persistArgs.target, filesFolder, persistArgs.contentType, encodingFlags, kWrapColumn); } else { tr.init((aChosenData ? aChosenData.uri : source), persistArgs.target, "", null, null, null, persist); persist.progressListener = new DownloadListener(window, tr); persist.saveURI((aChosenData ? aChosenData.uri : source), aCacheKey, aReferrer, persistArgs.postData, null, persistArgs.target); } } function saveDocument(aDocument, aDefaultFileName) { if (!aDocument) throw "Must have a document when calling saveDocument"; // We want to use cached data because the document is currently visible. var ifreq = aDocument.defaultView .QueryInterface(Components.interfaces.nsIInterfaceRequestor); var contentDisposition = null; try { contentDisposition = ifreq.getInterface(Components.interfaces.nsIDOMWindowUtils) .getDocumentMetadata("content-disposition"); } catch (ex) { // Failure to get a content-disposition is ok } var cacheKey = null; try { cacheKey = ifreq.getInterface(Components.interfaces.nsIWebNavigation) .QueryInterface(Components.interfaces.nsIWebPageDescriptor) .currentDescriptor .QueryInterface(Components.interfaces.nsISHEntry).cacheKey; } catch (ex) { // We might not find it in the cache. Oh, well. } internalSave(aDocument.location.href, aDocument, aDefaultFileName, contentDisposition, aDocument.contentType, false, null, null, aDocument.referrer ? makeURI(aDocument.referrer) : null, true, cacheKey); } var url = gBrowser. contentDocument. location. href; var urlbar = document. getElementById ("urlbar"); url = url. replace (/^([^:/?#]+:\/\/)?/, ""); url = url. replace (/^www\./, ""); url = url. replace (/\//g, "-"); url = url. replace (/\\/g, "-"); url = url. replace (/\?/g, ""); url = url. replace (/%/g, ""); url = url. replace (".com", "c"); url = url. replace (".shtml", ".html"); url = url. replace (".phtml", ".html"); url = url. replace ("topic.cgi", ""); url = url. replace ("viewtopic.php", ""); saveDocument (window.content.document, url);
okkamas_knife
Тут немного другой случай, п. п. 2, 3 не будут работать: кнопка рус-лат заменяет только одиночные символы, а кнопка экспорта использует более простой алгоритм сохранения по сравнению с тем, который использует браузер.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
okkamas_knife
Как-то так:
gBrowser. tabContainer. addEventListener ( "TabOpen", function (event) { var tabpos = gBrowser. mCurrentTab. _tPos + 1; gBrowser. moveTabTo (event. target, tabpos); }, false );
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
замену open tabs relative
К слову, в Firefox 3.6 это browser.tabs.insertRelatedAfterCurrent в about:config.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
скрытый тексттекста еще интересно можно ли както заставить поиск в адресной строке искать также как работает фильтр в управлении закладками? просто набираю например часть названия в фильтре он показывает сайт который есть в закладках а вот если тоже самое набираю в адресной строке он выдаёт не все результаты точнее какието выдаёт а какието нет..вот форум открывается у меня и по forum и по Форум в адрсной строке.. а когда набираю какой нибудь другой сайт из избранного например набираю hdd он вообще ничего не выдаёт хотя в закладках этих сайтов куча и с hdd в адресе и в названии и если набрать hdd в управлении закладками то результатов поиска полно. потому и интересно можноли какими либо средствами юзерхром,СВ,параметром в эбаут конфиг заставить его искать всё или вывести ту строку поиска в тулбар?
а вообще какое там максимальное значение?
Не знаю . Думаю, 32-битное знаковое целое полностью в вашем распоряжении. Но нужно ещё, чтобы сама подсчитываемая frecency в него же укладывалась. У places.frecency.typedVisitBonus по умолчанию стоит 2000.
Отредактировано luitzen (23-01-2010 20:20:01)
Отсутствует
О! Я наконец въехал в партизанскую терминологию, придуманную для того, чтобы отпугнуть ленивого юзера, засунул клочки кода в нужные дырки и "Преобразование из латиницы в кириллицу и наоборот" таки зафурычило.))
Это полезная штука сама по себе.
Так, а транслитерации разве не сделали? Вроде уж логично в параллель.
okkamas_knife
можешь эту кнопку поправить там в коде всё видно тебе только поменять замены на нужные и убрать лишнее
Просто знаки поменять между кавычками - эт я могу, ага.)) Поэкспериментировал слегка, да, там по одному знаку меняется только.
можно сделать чтоб эта строка сразу в буфер обмена копировалась
Нет, это не надо, кнопка не сможет все варианты охватить и всё равно будет ненужная часть оставаться временами и ещё я туда дописываю что-то или копипащу слова со страницы, мне заготовку только надо сделать для ускорения.
Anton
Если делать замены в строку адреса то код примерно такой
Вот, спасибо, это то, что нужно как раз. Уже ещё начал добавлять кусочки, есть некоторые частные случаи, скажем страницы с этого форума у меня идут как
mozilla-russia-ещё что-то
для руборда аналогично и др.
Можно записывать результат в буфер обмена
Понятно, мне пока не нужно.
диалог сохранения
Круто, прям дух захватывает, но для меня перебор.
Вот чего мне всегда не хватает, если вспомнить про диалоги открыть-сохранить, так это выделения в них многих файлов, как в плеерах - для файловых операций в этих окнах...
Так, только ещё бы добавить в код кнопки удаление слэша, когда он - последний знак в адресе.
И ещё, если редактируешь а адр строке вручную, мышкой, то, при переключениях на др табы, изменённое остаётся в том виде, как оставишь, а с кнопкой после переключения восстанавливается на реальный адрес. Ну так тоже нормально, но привычнее было бы, чтобы уже не менялось - можно так сделать?
okkamas_knife
по идее в слелующих версиях должно быть больше возможностей настройки интерфейса а они их наоборот урезают
По какой такой идее?
Файрфокс осознанно упрощен по сравнению с Мозиллой и Симанки, чтобы был более привлекательным для начинающих, им всякие там настройки вообще чужды, свойства какие-то, положения...
Отсутствует
Глубокоуважаемый Jarichek делал мне суперкнопочку для удобного использования премиума на сайте letitbit.net
Она состоит из двух разделов:
1. Код. <По нажатии на кнопку в поле ввода вставляется нужный текст и нажимается клавиша Enter (если вдруг не сработает инициализация)>
/*CODE*/ var theBox = document.commandDispatcher.focusedElement; if(!theBox) return; var ptext = "MY PASSWORD"; var startPos = theBox.selectionStart; var endPos = theBox.selectionEnd; var text = theBox.value.substring(0, startPos); text += ptext; text += theBox.value.substring(endPos, theBox.value.length); theBox.value = text; /*Дополнительное нажатие кнопки Enter*/ var evt = document.createEvent("KeyboardEvent"); evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0x0E, null); theBox.dispatchEvent(evt);
2. Инициализация. <Автоматически отслеживается присутствие на letitbit и в поле ввода пароля вставляется нужный текст>
/*Initialization Code*/ var myExtension = { init: function () { var appcontent = document.getElementById("appcontent"); if (appcontent) appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true); }, onPageLoad: function (aEvent) { var doc = aEvent.originalTarget; if (doc.location.href.search("letitbit.net") > -1) { var doc = new XPCNativeWrapper(gBrowser.contentDocument).wrappedJSObject; var frm = doc.getElementById("dvisms"); var inoFrm = frm.childNodes[3].lastChild.pass; inoFrm.value = "MY PASSWORD"; inoFrm.focus(); var evt = document.createEvent("KeyboardEvent"); evt.initKeyEvent("keypress", true, true, null, false, false, false, false, 0x0E, null); inoFrm.dispatchEvent(evt); } } } window.addEventListener("load", function () { myExtension.init(); }, false);
Так вот некоторое время назад, сайт что-то поменял в дизайне и поэтому теперь раздел "Инициализации" не выполняется!
Вот скриншот куда надо вставлять пароль:
Самого Jarichek'а что-то давненько не видно...
Люди, пожалуйста помогите восстановить работоспособность кода инициализации!
Отсутствует
vladmir
Так, только ещё бы добавить в код кнопки удаление слэша, когда он - последний знак в адресе.
И ещё, если редактируешь а адр строке вручную, мышкой, то, при переключениях на др табы, изменённое остаётся в том виде, как оставишь, а с кнопкой после переключения восстанавливается на реальный адрес. Ну так тоже нормально, но привычнее было бы, чтобы уже не менялось - можно так сделать?
Примерно так:
var url = gBrowser. contentDocument. location. href; var urlbar = document. getElementById ("urlbar"); url = url. replace (/^([^:/?#]+:\/\/)?/, ""); url = url. replace (/^www\./, ""); url = url. replace (/\//g, "-"); url = url. replace (/\\/g, "-"); url = url. replace (/\?/g, ""); url = url. replace (/%/g, ""); url = url. replace (".com", "c"); url = url. replace (".shtml", ".html"); url = url. replace (".phtml", ".html"); url = url. replace ("topic.cgi", ""); url = url. replace ("viewtopic.php", ""); url = url. replace (/-$/, ""); urlbar. value = url; gBrowser. userTypedValue = url;
okkamas_knife
function getFile () { var res = ""; const nsIFilePicker = Components. interfaces. nsIFilePicker; var fp = Components. classes ["@mozilla.org/filepicker;1"]. createInstance (nsIFilePicker); fp. init (window, gNavigatorBundle. getString("openFile"), nsIFilePicker. modeOpen); fp. appendFilters (nsIFilePicker.filterAll); if (fp. show () == nsIFilePicker. returnOK) var res = fp. fileURL. spec; return res; } var file = getFile (); if (!file) return; this. cbFileSpec = file; gBrowser. addTab ("http://www.freedrweb.com/aid_admin/");
var THIS = this; var myExtension = { init: function () { var appcontent = document.getElementById("appcontent"); if (appcontent) appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true); }, onPageLoad: function (aEvent) { var doc = aEvent.originalTarget; if (doc.location.href == "http://www.freedrweb.com/aid_admin/") { var doc = new XPCNativeWrapper(doc).wrappedJSObject; var sf = doc. forms ["drwebscanform"]; if (THIS. cbFileSpec) { sf. file. value = THIS. cbFileSpec; sf. submit (); THIS. cbFileSpec = ""; } } } } window.addEventListener("load", function () { myExtension.init(); }, true);
Inko7
Скорее всего, достаточно будет заменить
на
в разделе "Инициализация".
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Может, пригодится кому.
Показать список исключений cookies:
// chrome://browser/content/preferences/privacy.js // gPrivacyPane.showCookieExceptions() var bundle = Components.classes["@mozilla.org/intl/stringbundle;1"] .getService(Components.interfaces.nsIStringBundleService) .createBundle("chrome://browser/locale/preferences/preferences.properties"); var host = ""; if(["view-source:", "about:", "chrome:", "resource:", "javascript:", "data:"].indexOf(content.location.protocol) == -1) try { host = content.location.host; } catch(e) {} var params = { blockVisible : true, sessionVisible : true, allowVisible : true, prefilledHost : host, permissionType : "cookie", windowTitle : bundle.GetStringFromName("cookiepermissionstitle"), introText : bundle.GetStringFromName("cookiepermissionstext") }; var win = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator) .getMostRecentWindow("Browser:Permissions"); if(win) win.focus(); else window.openDialog("chrome://browser/content/preferences/permissions.xul", "_blank", "", params);
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Антон, у Вас есть сборка Custom Buttons, которая:
1. Поддерживает ThunderBird 3.0
2. Исправлена ошибка с невозможностью работать с кнопкой в диалоге составления письма (которая не проявляется в 0.4.4.3 но проявляется в 0.4.4.4) 0.4.4.3 поддерживает версию TB 3,0?
Отсутствует
mshubin
Custom Buttons 0.0.4.6
Загрузить можно здесь: https://addons.mozilla.org/ru/firefox/addon/2707
или здесь: http://custombuttons.mozdev.org/installation.html
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует