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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№495107-10-2012 12:16:13

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

Re: Custom Buttons

Inko7 пишет

Группы закрываются нормально, но значок изменяется не правильно, с отставанием в 1 группу и алерт, выскакивающий  при закрытии, тоже ошибается на 1. Что не так, не пойму.

Наверно закрытие групп происходит не сразу, а уже после того как твоей кнопке сработал alert и TogglePict();

Выделить код

Код:

if(event.button == 2) {
            // Закрыть текущую группу
            event.preventDefault();
            event.stopPropagation();
            var tab = TabView._window.GroupItems.getNextGroupItemTab(true).tab;
            var group = TabView._window.GroupItems._activeGroupItem;
            group.fadeAwayUndoButtonDelay = 0;
            group.closeAll();
            gBrowser.selectedTab = tab;
            setTimeout(function() {  
            TogglePict();
            alertsService.showAlertNotification(tabpicton, "Группа вкладок удалена", "Всего групп:  " + TabView._window.GroupItems.groupItems.length, false, "", null, "");
            }, 500)
            }

Отредактировано bunda1 (07-10-2012 12:20:36)

Отсутствует

 

№495207-10-2012 12:31:44

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 15.0

Re: Custom Buttons

bunda1
спасибо, так работает!
ох и заморочки с этими группами...

Отсутствует

 

№495307-10-2012 12:42:03

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

Re: Custom Buttons

Inko7 пишет

ох и заморочки с этими группами...

Но кнопка может получится полезная.
Тут у тебя что то лишние:

Выделить код

Код:

// выходим, если функция уже выполнялась
  if (window.gruppiRun == 'stop') return;
  window.gruppiRun = 'stop';
  if (window.tabscrollRun == 'stop') return;
  window.tabscrollRun = 'stop';

Отредактировано bunda1 (07-10-2012 12:42:25)

Отсутствует

 

№495407-10-2012 12:52:17

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 15.0

Re: Custom Buttons

bunda1
почему?
брал пример с твоих кнопок: раз создаются два обработчика (один для клика, другой для скролла), то и блокировать нужно их повторный запуск
или я не про то?

Отсутствует

 

№495507-10-2012 12:59:35

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

Re: Custom Buttons

Да блокировать нужно, но хватит одной блокировки, например можно оставить:

Выделить код

Код:

if (window.gruppiRun == 'stop') return;
  window.gruppiRun = 'stop';

Но я уже убедился на своем опыте что такая блокировка не универсальна.
Так вот лучше:

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ..............
if (this.hasAttribute("stop")) return; 

  // запуск функций и обработчиков ....
  alert(arguments.callee);

// устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды  
this.setAttribute("stop","true");

Добавлено 07-10-2012 13:01:16
Но тоже есть проблемы :(

Добавлено 07-10-2012 13:05:51
Наверно Dumby и Infocatcher сделали бы удаление обработчиков. Tак конечно лучше, но мой метод проще.

Отредактировано bunda1 (07-10-2012 13:06:22)

Отсутствует

 

№495607-10-2012 13:16:18

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 15.0

Re: Custom Buttons

bunda1
Но если оставить, как есть (или с одной блокировкой), так тоже ж пройдет?
Или весь весь мой блок запуска/блокировки обработчиков нужно заменить на эти строки ?

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ..............
if (this.hasAttribute("stop")) return; 

// устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды  
this.setAttribute("stop","true");

или нужны все строки, что ты привел?
А что это такое? Куда его впихнуть?

Выделить код

Код:

// запуск функций и обработчиков ....
  alert(arguments.callee);

И еще: это ж у меня не отдельная кнопка, а код для инициализации и он вписан у меня в кнопку наряду с другими различными кодами. Получается этих строчек хватит для всех кодов сразу?

Отсутствует

 

№495707-10-2012 13:26:35

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

Re: Custom Buttons

Inko7 пишет

Но если оставить, как есть (или с одной блокировкой), так тоже ж пройдет?

Да если оставить как есть или с одной блокировкой тоже будет работать.

Inko7 пишет

И еще: это ж у меня не отдельная кнопка, а код для инициализации и он вписан у меня в кнопку наряду с другими различными кодами. Получается этих строчек хватит для всех кодов сразу?

Да хватит для всех кодов сразу, я сам так делаю. Вот пример Toggle Find+3, там 20 обработчиков блокируется.


Выделить код

Код:

// запуск функций и обработчиков ....
  alert(arguments.callee);

Это просто пример, что бы проверить мой метод. Вместо этого кода пишем свой код.

Отредактировано bunda1 (07-10-2012 13:36:32)

Отсутствует

 

№495808-10-2012 02:32:12

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2252
UA: Firefox 10.0

Re: Custom Buttons

bunda1

Я серьёзно задумался над необходимостью блокировки обработчиков
от повторной инициализации кнопки. Именно тех, которые «addEventListener».
Никак не могу разобраться. :sick:
Нужен практический пример негативного влияния неблокированного EventListener'а
или, хотя бы, теоретическое обоснование, выручай...

Отсутствует

 

№495908-10-2012 05:23:21

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2252
UA: Firefox 10.0

Re: Custom Buttons

okkamas_knife

Точно, проверил, так и есть, теперь ясно - надо удалять или
блокировать повторный запуск, спасибо за науку.

Отсутствует

 

№496008-10-2012 18:29:48

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

Re: Custom Buttons

Dumby пишет

Я серьёзно задумался над необходимостью блокировки обработчиков
от повторной инициализации кнопки. Именно тех, которые «addEventListener».
Никак не могу разобраться. :sick:

Ну принципе уже okkamas_knife ответил. Обработчики дублируются от повторной инициализации кнопки и некоторые функции глючат, теоретическое обоснование не знаю.

Добавлено 08-10-2012 18:33:48
Кстати перенос вкладки в новое окно тоже может приводить к проблемам с CB кодом, вчера с этим столкнулся.

Отредактировано bunda1 (08-10-2012 18:33:48)

Отсутствует

 

№496110-10-2012 15:29:52

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 16.0

Re: Custom Buttons

bunda1
Использую твой Anti Boss - хорошая вещь!
Но вот возник вопрос по коду со схожим функционалом:
как отслеживать не ЛКМ+ПКМ (как в антибоссе), а например ЛКМ + скролл вверх/вниз?
Я бы масштабирование смог повесить, переход по странице или другие функции...

Отсутствует

 

№496210-10-2012 19:20:17

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

Re: Custom Buttons

Inko7 пишет

bunda1
как отслеживать не ЛКМ+ПКМ (как в антибоссе), а например ЛКМ + скролл вверх/вниз?
Я бы масштабирование смог повесить, переход по странице или другие функции...

Выделить код

Код:

// ...............................................................................
// добавляем обработчики для обработки мышиных событий на странице ....
gBrowser.addEventListener("mousedown", function(event) { managePage.buttonDown(event) }, false); // нажатие на кнопку мыши
gBrowser.addEventListener("mouseup", function(event) { managePage.buttonUp(event) }, false); // нажатая кнопка мыши отпущена
gBrowser.addEventListener('DOMMouseScroll', function(event) { managePage.pageScroll(event) }, false); // для обработки скролла на странице

var managePage = {

buttonDown : function(event) {  
   if ( event.button == 0 ) this.leftButtonDown = true; 
   },

buttonUp : function(event) {
   if ( event.button == 0 ) this.leftButtonDown = false;
   },
 
pageScroll : function(event) {
   if ( !this.leftButtonDown ) return;
        event.preventDefault();
        event.stopPropagation();
        
        custombuttons.alertSlide("Cкролл на странице", (event.detail < 0)? "Страницу на самый верх": "Страницу в самый низ");
        (event.detail < 0)? goDoCommand('cmd_scrollTop'): goDoCommand('cmd_scrollBottom');
   }
   
};

Есть кнопка где это и многое другое уже есть CB Mouse Gestures+

Отсутствует

 

№496310-10-2012 20:47:06

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 1008
UA: Firefox 16.0

Re: Custom Buttons

bunda1
Спасибо, работает!!!

Есть кнопка где это и многое другое уже есть CB Mouse Gestures+

это новая версия кнопки из поста №11 ?
надо бы в отдельную темку запостить эту кнопку, а то потом фиг найдешь...

Отсутствует

 

№496410-10-2012 21:13:55

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

Re: Custom Buttons

Inko7
Да, новая. И надо бы в отдельную темку запостить эту кнопку, но лень.

Отсутствует

 

№496510-10-2012 21:30:37

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 16.0

Re: Custom Buttons

bunda1
А что там нового добавлено кроме различных жестов? Какие-то изменения в самой работе кнопки есть?

Отредактировано Kamui (10-10-2012 21:30:49)

Отсутствует

 

№496610-10-2012 21:44:14

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

Re: Custom Buttons

Kamui
Теперь рисует жести на странице.
Жесты разделены по категориям, так намного удобней.
Перевод текста в окошке работает быстрее и его теперъ можно закрыть кликом по странице.

Отсутствует

 

№496710-10-2012 23:00:27

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 16.0

Re: Custom Buttons

bunda1 пишет

Теперь рисует жести на странице.

Странно, у меня жесты не рисует, хотя все остальное вроде работает исправно.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№496810-10-2012 23:16:52

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

Re: Custom Buttons

villa7 пишет

Странно, у меня жесты не рисует, хотя все остальное вроде работает исправно.

Мистика однако.

Отсутствует

 

№496910-10-2012 23:57:56

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 16.0

Re: Custom Buttons

bunda1

bunda1 пишет

Мистика однако

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


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№497011-10-2012 08:21:03

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

Re: Custom Buttons

villa7 пишет

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

Смотри где green

Выделить код

Код:

if (direction == "R") {
                            for (var i = this.lastX, j = this.lastY; i <= event.screenX; i += 2)
                            docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + i - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + (subY < 0 ? (j -= 2 * Math.abs(subY / subX)) : (j += 2 * Math.abs(subY / subX))) - content.mozInnerScreenY) + "px;";
                        }
                        if (direction == "L") {
                            for (var i = this.lastX, j = this.lastY; i >= event.screenX; i -= 2)
                            docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + i - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + (subY < 0 ? (j -= 2 * Math.abs(subY / subX)) : (j += 2 * Math.abs(subY / subX))) - content.mozInnerScreenY) + "px;";
                        }
                        if (direction == "U") {
                            for (var i = this.lastY, j = this.lastX; i >= event.screenY; i -= 2)
                            docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + (subX < 0 ? (j -= 2 * Math.abs(subX / subY)) : (j += 2 * Math.abs(subX / subY))) - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + i - content.mozInnerScreenY) + "px;";
                        }
                        if (direction == "D") {
                            for (var i = this.lastY, j = this.lastX; i <= event.screenY; i += 2)
                            docfrag.appendChild(document.createElementNS("http://www.w3.org/1999/xhtml", "xdTrailDot")).style.cssText = "width:4px; height:4px; background: none repeat scroll 0% 0% green; border: 0px none; position: absolute; z-index: 2147483647; left:" + (content.pageXOffset + (subX < 0 ? (j -= 2 * Math.abs(subX / subY)) : (j += 2 * Math.abs(subX / subY))) - content.mozInnerScreenX) + "px;top:" + (content.pageYOffset + i - content.mozInnerScreenY) + "px;";
                        }

Отсутствует

 

№497111-10-2012 09:11:55

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

Re: Custom Buttons

okkamas_knife пишет

вытащенный из console.js код не срабатывет

Разумеется. Ему же нужно окно консоли ошибок.

https://developer.mozilla.org/en-US/doc … eset%28%29

Выделить код

Код:

Components.classes["@mozilla.org/consoleservice;1"]
    .getService(Components.interfaces.nsIConsoleService)
    .reset();

И можно повыключать
javascript.options.showInConsole (только не забыть включить, когда потребуется понять, что происходит с каким-нибудь расширением или кнопкой)
layout.css.report_errors
javascript.options.strict (по умолчанию отключено)
dom.report_all_js_exceptions (по умолчанию отключено)


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

Отсутствует

 

№497211-10-2012 09:58:07

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

Re: Custom Buttons

okkamas_knife пишет

но при открытой консоли никаких изменений не происходило в её окне потому и думал что не работает

Ага, недоработка консоли.
Если там вообще есть оповещение об очистке, тогда недоработка API. :) Тут, во всяком случае, только оповещение о новых записях.

okkamas_knife пишет

gContextMenu.onLink

Это chrome://browser/content/nsContextMenu.js или chrome://communicator/content/nsContextMenu.js в SeaMonkey.

Как минимум, вот эти есть:

Выделить код

Код:

// Initialize contextual info.
    this.onImage           = false;
    this.onLoadedImage     = false;
    this.onCompletedImage  = false;
    this.onCanvas          = false;
    this.onVideo           = false;
    this.onAudio           = false;
    this.onTextInput       = false;
    this.onKeywordField    = false;
    this.mediaURL          = "";
    this.onLink            = false;
    this.onMailtoLink      = false;
    this.onSaveableLink    = false;
    this.link              = null;
    this.linkURL           = "";
    this.linkURI           = null;
    this.linkProtocol      = "";
    this.onMathML          = false;
    this.inFrame           = false;
    this.inSyntheticDoc    = false;
    this.hasBGImage        = false;
    this.bgImageURL        = "";
    this.onEditableArea    = false;
    this.isDesignMode      = false;

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

Отсутствует

 

№497311-10-2012 10:05:15

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 16.0

Re: Custom Buttons

Infocatcher пишет

nsIConsoleService#reset

Консоль прекрасно и тут же очищается записью в неё null.

Отсутствует

 

№497411-10-2012 17:21:41

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

Re: Custom Buttons

Для экспериментов и проверки работы деструкторов: Custom Buttons: Disable Initialization
Добавляет в контекстное меню галочку «Включить инициализацию» и подсвечивает отключенные кнопки рамкой из точек.
Не рекомендуется для постоянного использования: для отключения в начало кода инициализации просто добавляется «return;», так что ненужные кнопки лучше убирать с панелей инструментов (или вообще удалять). Более того, стиль для подсветки не очень быстрый.


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

Отсутствует

 

№497511-10-2012 21:48:04

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

Re: Custom Buttons

Как сделать сохранение изображение в папку загрузки без запроса, если адрес изображения известен.

Коди которые ниже это делают но мне нужно сохранение не из контекстного меню изображения а из кнопки и никак не удаются переделать эти коди. :(

Выделить код

Код:

gBrowser.mPanelContainer.addEventListener("dblclick", function(event) {
      if (event.button !== 2) return;
      //...
      if (event.target.nodeName == 'IMG'){
      //if (gContextMenu.onLink && gContextMenu.onImage){ 
      var doc = gContextMenu.target.ownerDocument;
      var d = "nodePrincipal" in doc?doc.nodePrincipal:doc.location.href; 
      urlSecurityCheck(gContextMenu.imageURL, d);
      saveImageURL(gContextMenu.imageURL, null, "SaveImageTitle", false, true, makeURI(doc.location.href));
      //....
      setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 50)
      };
}, false);
Выделить код

Код:

(function() {
  var saveImageMenu = document.getElementById("context-saveimage");
  if (!saveImageMenu) return;

  saveImageMenu.addEventListener("click", function(event) {
    if (event.button != 1) return;

    var doc = gContextMenu.target.ownerDocument;
    if ('nodePrincipal' in doc)
      urlSecurityCheck(gContextMenu.imageURL, doc.nodePrincipal); //Fx3
    else
      urlSecurityCheck(gContextMenu.imageURL, doc.location.href); //Fx2
    
    saveImageURL(gContextMenu.imageURL, null, "SaveImageTitle", false, true, makeURI(doc.location.href));
    event.originalTarget.parentNode.hidePopup();
  }, false);
})();

Отсутствует

 

Board footer

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