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

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

№147613-02-2010 14:40:35

AnVn
Участник
 
Группа: Members
Зарегистрирован: 13-02-2010
Сообщений: 3
UA: Firefox 3.6

Re: Custom Buttons

Может кто-нибудь подсказать (можно ссылкой), как сделать кнопку для комбинации клавиш (Send Key Event)? Есть подобная возможность для "мышиных жестов" (в расширении FireGestures). Выглядит этот код, например, следующим образом:

Выделить код

Код:

var evt = document.createEvent("KeyEvents");
evt.initKeyEvent(
  "keypress",
  true,
  true,
  null,
  false,  // holds Ctrl key
  false,  // holds Alt key
  false,  // holds Shift key
  false,  // holds Meta key
  evt.DOM_VK_F5,  // presses a special key, @see http://mxr.mozilla.org/mozilla/source/dom/public/idl/events/nsIDOMKeyEvent.idl
  0  // presses a normal key, e.g. "A".charCodeAt(0),
);
document.documentElement.dispatchEvent(evt);

но при "тупой" вставке этого кода в кнопку она не срабатывает... :(

Отсутствует

 

№147714-02-2010 14:58:28

AnVn
Участник
 
Группа: Members
Зарегистрирован: 13-02-2010
Сообщений: 3
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife
Мне нужно ровно наоборот. Не задать сочетание клавиш для срабатывания кнопки, а "от обратного": есть зарегистрированное в системе сочетание клавиш и надо сделать кнопку, дублирующую это сочетание. Попробую поподробнее объяснить. Есть весьма неплохая программка CintaNotes - легковесный менеджер заметок с функцией захвата текста из других приложений, быстрым поиском и поддержкой тегов. (http://forum.ru-board.com/topic.cgi?for … ic=32648#1). Очень удобная и ИМХО наиболее подходящая замена всяческим QuickNote и подобным дополнениям. Она работает по горячим клавишам, которые можно настроить (например, захват выделенного текста CTRL+SPACE, открытие блокнота - CTRL+ALT+SPACE). Вот и хочется для нее кнопку на панели создать, чтобы одной только мышой можно было работать не трогая клавиатуру. По аналогии с существующей кнопкой для того-же самого QuickNote например (по левому клику захват выделенного текста, по правому - открытие блокнота и т.п.) К сожалению в самой программе CintaNotes не смог найти возможности задания/указания параметров командной строки - тогда можно было бы сотворить простую кнопку запуска данного приложения с необходимыми параметрами... Вот и получается, что единственная возможность - это создание кнопки, которая по левому клику просто тупо отправляла бы в систему (эмулировала) команду нажатия какого-либо сочетания клавиш, по правому клику - эмулировала иное сочетание клавиш и т.д. Много чего перепробовал, что-то пока не получается... :(  Возможно ли это реализовать?

Отсутствует

 

№147815-02-2010 16:06:01

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

AnVn
С помощью кода javascript можно "послать" сочетание клавиш только окну Firefox. В обработчик другой программы они не попадут.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№147917-02-2010 18:15:52

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

в инициализацию

Выделить код

Код:

this.onclick = function(e) {
    if(e.button == 0) {
        Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");
    }
};

mzfx

Отсутствует

 

№148018-02-2010 16:19:47

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

okkamas_knife
есть такой способ vacuum-сжатия файрфоксовской базы
в java-консоль вводим следующую строку и жмём выполнить

Выделить код

Код:

Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");

Эту строку можно поместить в раздел "Код", она будет выполняться.
Или воспользоваться кодом, предложенным iDev.Pi


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№148125-02-2010 17:11:42

4321vas
Участник
 
Группа: Members
Зарегистрирован: 25-02-2010
Сообщений: 4
UA: Firefox 3.5

Re: Custom Buttons

Anton
не подскажите
попробовал создать кнопку из готовых кнопок "Выбор папки загрузки", но как только после вставки кода нажимаю ОК
сразу же появляется окно выбора папки и все виснет намертво, даже диспетчер задач невозможно вызвать, а кроме того
после этого приходится восстанавливать профиль. Попробовал на двух разных профилях, одинаково, там код точно без ошибок?
Firefox 3.5.3
XP SP2

Отредактировано 4321vas (25-02-2010 17:16:02)

Отсутствует

 

№148225-02-2010 17:30:49

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.6

Re: Custom Buttons

4321vas
Кнопка моих рук дело и работает вроде как надо, проверял у себя.
А как ты создаешь кнопку? Очень похоже, что ты закидываешь этот код в раздел "Инициализация". Есть 2 способа ее создать:
1. То, что написано в разделе "код", можно добавить в раздел "Код" создаваемой кнопки.
2. То, что написано в разделе "код кнопки" скопировать полностью и вставить в адресную строку, нажать Ввод и согласиться добавить новую кнопку (в этом варианте присутствует еще и иконка к кнопке)
Может и есть какие огрехи, пусть Anton глянет :)

Отсутствует

 

№148325-02-2010 20:13:00

4321vas
Участник
 
Группа: Members
Зарегистрирован: 25-02-2010
Сообщений: 4
UA: Firefox 3.5

Re: Custom Buttons

Jarichek пишет

Очень похоже, что ты закидываешь этот код в раздел "Инициализация"

Да, так и есть.
Спасибо большое.

Добавлено 25-02-2010 20:26:26

Jarichek пишет

и работает вроде как надо

Все получилось.
Вы бы добавили это

Jarichek пишет

1. То, что написано в разделе "код", можно добавить в раздел "Код" создаваемой кнопки.
2. То, что написано в разделе "код кнопки" скопировать полностью и вставить в адресную строку, нажать Ввод и согласиться добавить новую кнопку (в этом варианте присутствует еще и иконка к кнопке)

в готовой кнопке.

Отсутствует

 

№148401-03-2010 00:40:12

Normah
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 209
UA: Firefox 3.6

Re: Custom Buttons

Ребята,  не мог бы кто-нибудь сделать кнопку, которая открывала бы окно "собранное"?

Отсутствует

 

№148501-03-2010 03:34:53

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife пишет

а теперь собственно просьба - подскажите код кнопки который при нажатии добавляет текущую страницу в закладки но вызывает диалоговое окно как когда добавляешь ссылку в закладки.

Выделить код

Код:

PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, content.location.href, content.document.title);

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№148601-03-2010 10:05:08

Normah
Участник
 
Группа: Members
Зарегистрирован: 24-03-2009
Сообщений: 209
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife спасибо большое.

Отсутствует

 

№148702-03-2010 23:33:24

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

Есть такое дополнение, которое умеет по альт+ЛКМ догружать недокаченные картинки на странице, а по шифт+ЛКМ открывать просматриваемую страницу из кэша гугла. Может ли кто по мотивам этого дополнения создать 2 кнопочки?

1. чтоб при клике ЛКМ по КБ-кнопке показывало текущую страницу из кэша яндекса, а при клике СКМ по этой кнопке чтоб из кэша гугла

2. кнопку, клик по которой догружал бы все недогруженные на странице картинки. И если это возможно, то чтоб после загрузки страницы автоматом шла проверка - есть ли недогруженные картинки и если есть - то автоматом догружать их, т.е. чтоб кликать по этой кнопке и вовсе не приходилось :)

Сможет кто сделать такое? :)


mzfx

Отсутствует

 

№148802-03-2010 23:54:27

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

Догрузка всех картинок на странице (секция «код»):

Выделить код

Код:

// Based on code from chrome://browser/content/nsContextMenu.js (Firefox 3.6)
function reloadImage(img) {
    if(!(img instanceof Components.interfaces.nsIImageLoadingContent))
        return;
    urlSecurityCheck(img.currentURI.spec,
                     gBrowser.contentPrincipal,
                     Components.interfaces.nsIScriptSecurityManager.DISALLOW_SCRIPT);
    img.forceReload();
}
function parseWin(win) {
    Array.forEach(win.frames, parseWin);
    Array.forEach(win.document.images, reloadImage);
}
parseWin(content);

Нагло стырено из chrome://browser/content/nsContextMenu.js

Там же можно обнаружить

Выделить код

Код:

var request =
          this.target.getRequest(Ci.nsIImageLoadingContent.CURRENT_REQUEST);
        if (request && (request.imageStatus & request.STATUS_SIZE_AVAILABLE))
          this.onLoadedImage = true;
        if (request && (request.imageStatus & request.STATUS_LOAD_COMPLETE))
          this.onCompletedImage = true;

и

Выделить код

Код:

// Reload image depends on an image that's not fully loaded
    this.showItem("context-reloadimage", (this.onImage && !this.onCompletedImage));

=/
То есть, возможно, стоит делать проверку.

А вот определение наличия незагруженных картинок перебором всех картинок – это криво, по-моему. Тут хорошо бы найти какие-нибудь оповещения о неудавшейся загрузке.

Отредактировано Infocatcher (02-03-2010 23:58:24)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№148902-03-2010 23:59:40

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher,  пасибо) я никогда не устану тебя плюсовать :)

Отредактировано iDev.Pi (03-03-2010 00:07:12)


mzfx

Отсутствует

 

№149003-03-2010 00:05:17

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

iDev.Pi пишет

текущую страницу из кэша

Для гугла – вот так (тоже секция «код»):

Выделить код

Код:

gBrowser.selectedTab = gBrowser.addTab("http://www.google.ru/search?q=cache:" + encodeURIComponent(content.location.href));

(в новой вкладке)
Или

Выделить код

Код:

loadURI("http://www.google.ru/search?q=cache:" + encodeURIComponent(content.location.href));

(в текущей вкладке)

Для яндекса нужно знать формат запроса...


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№149103-03-2010 00:12:33

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

И нечто вроде мануала для обработки кликов разными кнопками.

В секцию «инициализация» нужно добавить примерно следующее:

Выделить код

Код:

this.onclick = function(event) {
    if(event.button == 0) {
        // Действие при клике ЛКМ
    }
    else if(event.button == 1) {
        // Действие при клике СКМ
    }
    else if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Действие при клике ПКМ без модификаторов
    }
};
this.oncontextmenu = function(event) {
    if(event.button == 2 && !event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey) {
        // Блокируем контекстное меню при клике ПКМ без модификаторов
        event.preventDefault();
        event.stopPropagation();
    }
};

Если клик правой кнопкой обрабатывать не нужно, то часть кода про «this.oncontextmenu = function(event) { ... };» тоже не требуется.

Добавлено 03-03-2010 00:15:50
okkamas_knife
Мозилловцы не рекомендуют использовать _content (мол, deprecated). И правильнее делать encodeURIComponent, по идее. Хотя, конечно, это от серверной стороны зависит.

https://developer.mozilla.org/en/DOM/window.content

Some examples use _content instead of content. The former has been deprecated for a long time, and you should use content  in the new code.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№149203-03-2010 00:31:48

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher пишет

То есть, возможно, стоит делать проверку.

Но трафик при перезагрузке картинок, если все и так загружены, кажется, не идет.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№149303-03-2010 19:24:24

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

okkamas_knife, спасибо, а где информацию по яндексу ты нашёл? я бы с удовольствием почитал бы статейку о синтаксисе который он понимает и прочих мелких фишечках...

И ещё новый реквест. Это должно быть просто.
Кнопка которая бы при нажатии циклически бы меняла параметр accessibility.blockautorefresh на true или false (разрешить или запретить сайту саморефрешиться или перенаправляться). Ну и чтоб иконка индицировала текущее состояние.


mzfx

Отсутствует

 

№149403-03-2010 19:58:53

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: Custom Buttons

iDev.Pi пишет

Кнопка которая бы при нажатии циклически бы меняла параметр accessibility.blockautorefresh на true или false (разрешить или запретить сайту саморефрешиться или перенаправляться). Ну и чтоб иконка индицировала текущее состояние.

Сложный вариант (отслеживает изменение этой настройки извне, код для секции «инициализация»):

Выделить код

Код:

const uid = "__custombuttons__" + this.id;
if(uid in window)
    window[uid].destroy();

this.pref = {
    button: this,
    pName: "accessibility.blockautorefresh",
    get prefSvc() {
        return Components.classes["@mozilla.org/preferences-service;1"]
            .getService(Components.interfaces.nsIPrefService)
            .QueryInterface(Components.interfaces.nsIPrefBranch2);
    },
    get pVal() {
        return navigator.preference(this.pName);
    },
    set pVal(val) {
        navigator.preference(this.pName, val);
    },
    init: function() {
        window.addEventListener("unload", this, false);
        this.prefSvc.addObserver(this.pName, this, false);
        this.setState();
        //alert("init");
    },
    destroy: function() {
        this.prefSvc.removeObserver(this.pName, this);
        //alert("destroy");
    },
    setState: function() {
        this.button.setAttribute("checked", this.pVal);
    },
    toggle: function() {
        this.pVal = !this.pVal;
    },
    observe: function(subject, topic, pName) {
        if(topic == "nsPref:changed")
            this.setState();
    },
    handleEvent: function(e) {
        window.removeEventListener(e.type, this, false);
        this.destroy();
    }
};
this.onclick = function(e) {
    if(e.button == 0)
        this.pref.toggle();
};
window[uid] = {
    button: this,
    destroy: function() {
        this.button.pref.destroy();
    }
};

this.pref.init();

Простой вариант (изменяет состояние только при клике, тоже секция «инициализация»):

Выделить код

Код:

this.pName = "accessibility.blockautorefresh";
this.setState = function(pVal) {
    this.setAttribute("checked", arguments.length ? pVal : navigator.preference(this.pName));
}
this.onclick = function(e) {
    if(e.button == 0) {
        var pVal = !navigator.preference(this.pName);
        navigator.preference(this.pName, pVal);
        this.setState(pVal);
    }
};
this.setState();

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№149503-03-2010 20:58:42

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher
снова спасибо :) мне хватит и простого варианта.
okkamas_knife
ооо, великий метод :)


mzfx

Отсутствует

 

№149603-03-2010 21:30:28

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

okkamas_knife пишет

Anton
iDev.Pi
спасибо. воспользовался вторым вариантом(без Инициализации)
еще вопрос а можно ли сделать подобную кнопочку чтоб также сжимать базу Brief-a?

Вроде так:

Выделить код

Код:

window.openDialog('chrome://brief/content/compacting-progress.xul', 'Brief',
                              'chrome,titlebar,centerscreen');

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№149704-03-2010 12:03:27

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher пишет
Выделить код

Код:

PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, content.location.href, content.document.title);

Добавил код в следующую кнопку:

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

Выделить код

Код:

var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
    node.removeAttribute("id");
    Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
this. setAttribute ("popup", menu. id = "cbBookmarks-" + this. id);

this. onclick = function (event)
{
    if (event. button == 1)
    {
        if (event. originalTarget. nodeName != "toolbarbutton")
            return;
        //PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
        PlacesCommandHook.bookmarkLink(PlacesUtils.bookmarksMenuFolderId, content.location.href, content.document.title);
    }
    else if (event. button == 2)
    {
        if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
            return;
        toggleSidebar('viewBookmarksSidebar');
        event. preventDefault ();
        event. stopPropagation ();
    }
};

теперь при добавлении закладки начало появляться окно:
ae4db4502d21t.jpg

Отредактировано Jarichek (04-03-2010 12:04:00)

Отсутствует

 

№149804-03-2010 18:37:11

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 3.6
Веб-сайт

Re: Custom Buttons

Jarichek
Воспроизвести не удалось - видимо, дело в сборке.
Но установка переменной окружения XUL_ASSERT_PROMPT значением "0" должна подавить вывод подобных предупреждений.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№149904-03-2010 21:47:14

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher пишет

Простой вариант (изменяет состояние только при клике, тоже секция «инициализация»):

а как сменить картинку когда кнопка нажата на другую через data URI?


mzfx

Отсутствует

 

№150004-03-2010 21:54:07

Jarichek
Member I
 
Группа: Members
Откуда: Минск
Зарегистрирован: 09-04-2009
Сообщений: 306
UA: Firefox 3.6

Re: Custom Buttons

Anton
да, извиняюсь, дело было непонятно в чем, после обычного перезапуска браузера окно появляться перестало

Отсутствует

 

Board footer

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