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

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

№732610-01-2014 20:39:28

Etg
Участник
 
Группа: Members
Зарегистрирован: 26-11-2011
Сообщений: 13
UA: Firefox 26.0

Re: Custom Buttons

Подскажите шаблон кнопки которая содержит выпадающее меню через которое можно внести изменения в about:confg. Хочу иметь возможность быстрого переключения "родных" языков ФФ через intl.accept_languages.
Спасибо.

Отсутствует

 

№732711-01-2014 01:03:29

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

Re: Custom Buttons

Etg пишет:

Подскажите шаблон кнопки которая содержит выпадающее меню через которое можно внести изменения в about:confg. Хочу иметь возможность быстрого переключения "родных" языков ФФ через intl.accept_languages.
Спасибо.

Выделить код

Код:

var s = 'intl.accept_languages',
pref = Application.prefs.get(s),
value1 = 'ru,en,en-us',
value2 = 'lv,ia';

this.onclick = function(e) {
    if ( e.button == 0) {
         pref.value = (pref.value == value1) ? value2 : value1;
         }         
};
 
function toggleImage() { 
   var icon = self.ownerDocument.getAnonymousElementByAttribute( self, "class", "toolbarbutton-icon");
   icon.src = (pref.value == value1) 
   ? self.image 
   : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC';
};
toggleImage();
gPrefService.addObserver( s, toggleImage, false );
addDestructor(function() { gPrefService.removeObserver( s, toggleImage, false ) }); 

Отсутствует

 

№732811-01-2014 14:13:12

SendInfo
.
 
Группа: Members
Зарегистрирован: 14-02-2011
Сообщений: 271
UA: Firefox 29.0

Отсутствует

 

№732911-01-2014 15:31:31

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

Re: Custom Buttons

villa7 пишет:

Перерыл, но так ничего не нашёл, нужно вставлять на сайте подобные коды
Пробовал подставить в BB Color Menu не вышло, может кто подскажет как, или другую какую кнопку посоветует, или ещё что нибудь, только не расширение. Спасибо.

Где то я подобную кнопку делал но не могу найти. Смотрю у тебя там текст в несколько строк, это обязательно?

Отсутствует

 

№733011-01-2014 16:47:09

2k1dmg
Участник
 
Группа: Members
Зарегистрирован: 06-04-2011
Сообщений: 190
UA: Firefox 26.0

Re: Custom Buttons

bunda1
Может пригодится для конвертирования текста чтобы вставить как строку JS
oneLine выставить в true
выделить текст или открыть текстовый файл во вкладки или скопировать текст в буфер обмена и нажать кнопку.

Выделить код

Код:

// CSS to JS string - 2014-01-11v13
// CB code

'use strict';

let qout = 0;
// 0 - ' - одинарные
// 1 - " - двойные
let new_line = '\\n';
// \\n
// \\r\\n
let editor_new_line = 'auto';
// auto
// \n
// \r\n
let converter = 0;
// 0 - js
// 1 - regexp

let oneLine = false;
// true - результат в одну строку
// только для converter: 0 (js)

let selectedText = content.getSelection();
if (typeof selectedText == 'object') {
    if (selectedText.anchorNode &&
        selectedText.anchorNode.parentNode.nodeName.toLowerCase() == 'pre') {
        let range = selectedText.getRangeAt(0);
        selectedText = range.toString();
    } else
        selectedText = selectedText.toString();
}

if (selectedText) {
    convertCode(selectedText);
} else if (content.document &&
            /^(text\/(css|plain))$/.test(content.document.contentType)) {
    let codes = [content.document.body.textContent];
    if (!codes)
        return;
    codes.forEach(convertCode);
} else {
    let cb = gClipboard.read();
    if (cb)
        convertCode(cb);
}

function convertCode(str) {
    if (!str)
        return;
    let type;
    if (str.indexOf('\r\n') != -1) {
        type = 'win';
    } else if (str.indexOf('\r') != -1) {
        type = 'mac';
    } else {
        type = 'nix';
    }
    let lastNewLine = (type == 'nix') ? '\n' : '\r';
    if (editor_new_line == 'auto') {
        editor_new_line = lastNewLine;
    }
    let output = '';
    let q = (qout === 0) ? '\'' : '"';
    if (converter === 0) {
        let arr = [];
        let last = 0;
        let index = 0;
        let tmp = str;
        let step = (type == 'win') ? 2 : 1;
        while (tmp) {
            tmp = tmp.substring(last);
            index = tmp.indexOf(lastNewLine);
            if (index === -1) {
                arr.push(tmp.substring(0));
                break;
            }
            arr.push(tmp.substring(0, index));
            last = index + step;
        }
        if (oneLine) {
            output += q;
            for (let i = 0; i < arr.length; i++) {
                output += arr[i] + new_line;
            }
            output += q;
        } else {
            for (let i = 0; i < arr.length; i++) {
                output += q + arr[i] + new_line + q;
                if (i != arr.length-1)
                    output += ' +';
                output += editor_new_line;
            }
        }
    } else {
        let pat = (type == 'win') ? '\\r\\n' :
                    (type == 'mac') ? '\\r' : '\\n';
        let re = new RegExp('^([^' + pat + ']*)(' + pat + '|$)', 'gm');
        output = str.replace(re, q + '$1' + new_line + q + ' +' + editor_new_line)
                            .replace(/(\s+$)/g, '')
                            .replace(/(\s\+$)/g, '');
    }
    out(output);
}
function out(s) {
    let uri = 'data:text/plain;charset=utf-8,' + encodeURIComponent(s);
    gBrowser.selectedTab = gBrowser.addTab(uri, makeURI('about:blank'));
}

Отредактировано 2k1dmg (11-01-2014 17:48:27)

Отсутствует

 

№733111-01-2014 17:24:25

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

Re: Custom Buttons

2k1dmg пишет:

bunda1
Может пригодится для конвертирования текста чтобы вставить как строку JS

Отлично, это конечно в хозяйстве пригодится.

Отсутствует

 

№733211-01-2014 18:23:06

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

Re: Custom Buttons

bunda1
Прослушка -

Выделить код

Код:

<object><embed src="http://akotha.narod.ru/akp/play.swf?mp3=http://rghost.ru/download/action/НОМЕР_ФАЙЛА/mp3" width="200" height="20" type="application/x-shockwave-flash" /></object>

нет, можно и в одну.

SendInfo
Я пробовал в разные подставлять, но где то "" в коде не дают подставить, где то ещё что.

Отредактировано villa7 (11-01-2014 18:25:41)


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

Отсутствует

 

№733311-01-2014 20:18:24

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

Я хочу сделать, чтобы на этом форуме внешние ссылки открывались в новых вкладках.  Взял EventListener который предложил bunda1 и сделал код

Выделить код

Код:

addEventListener("TabAttrModified", function() { 
  if (content.location.host==="forum.mozilla-russia.org"){
   var lnk=content.document.getElementsByTagName('A');
      for (i=0; i<lnk.length; i++) {

      if (lnk[i].href.indexOf('forum.mozilla-russia.org') == -1)
      lnk[i].setAttribute("target", "_blank")
      } 
   }    
}, true, gBrowser.tabContainer ); 

По сути, код перебирает все ссылки на странице. Хотелось бы знать, от этого он получился "тяжёлый"?

Что-то мне кажется после его добавления браузер стал притормаживать.

Отсутствует

 

№733411-01-2014 20:46:39

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

Re: Custom Buttons

Чайник пишет:

Я хочу сделать, чтобы на этом форуме внешние ссылки открывались в новых вкладках.  Взял EventListener который предложил bunda1 и сделал код
Хотелось бы знать, от этого он получился "тяжёлый"?
Что-то мне кажется после его добавления браузер стал притормаживать.

Я думаю не должен притормаживать, но быстрее будет если заменить:

Выделить код

Код:

if (lnk[i].href.indexOf('forum.mozilla-russia.org') == -1)

на:

Выделить код

Код:

if (lnk[i].host = 'forum.mozilla-russia.org')

Отредактировано bunda1 (11-01-2014 20:50:53)

Отсутствует

 

№733511-01-2014 21:09:51

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет:

заменить на if (lnk[i].host = 'forum.mozilla-russia.org')

Заменил, только добавил ! перед =
И на всякий случай переделал EventListener. Теперь код выглядит так

Выделить код

Код:

addEventListener('DOMContentLoaded', function(){
   if (content.location.host==="forum.mozilla-russia.org"){
   var lnk=content.document.getElementsByTagName('A');
      for (i=0; i<lnk.length; i++) {
         if (lnk[i].host != 'forum.mozilla-russia.org')
         lnk[i].setAttribute("target", "_blank")
      } 
   } 
 }, true, gBrowser)

Посмотрю как будет.
А куда воткнуть алертслайд, после строчки lnk[i].setAttribute("target", "_blank")?
Kогда он должен вылезать, каждый раз, когда ссылке присваивается атрибут target="_blank"?

И почему EventListener надо на DOMContentLoaded а не просто на load?

Отредактировано Чайник (11-01-2014 21:14:25)

Отсутствует

 

№733611-01-2014 21:27:59

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

Re: Custom Buttons

Чайник пишет:

А куда воткнуть алертслайд, после строчки lnk[i].setAttribute("target", "_blank")?
Kогда он должен вылезать, каждый раз, когда ссылке присваивается атрибут target="_blank"?
И почему EventListener надо на DOMContentLoaded а не просто на load?

Можно и load, даже луче. Но и load и DOMContentLoaded не помогут если после восстановлении сессии переключится на уже загруженную вкладку с нашим форумом.

Отсутствует

 

№733711-01-2014 21:45:02

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет:

Можно и load, даже луче. Но и load и DOMContentLoaded не помогут если после восстановлении сессии переключится на уже загруженную вкладку с нашим форумом.

То есть лучше всего оставить как было  - TabAttrModified -  это оптимальный вариант?

А то, что код перебирает все ссылки на странице, не сильно его утяжеляет?


okkamas_knife насчёт применения слайда для отладки - однозначно в копилку, оказывается полезная штука :)

Отсутствует

 

№733811-01-2014 22:05:54

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

Re: Custom Buttons

Я не много ошибся, нужно:

Выделить код

Код:

if (lnk[i].host !== 'forum.mozilla-russia.org')

Ну если ты открываешь ссылки кликом то наверно будет более производительно добавлять ("target", "_blank") по клику или просто открывать в новой вкладке то что нужно.

Добавлено 11-01-2014 22:21:16
Иначе TabAttrModified -  оптимальный вариант.

Добавлено 11-01-2014 22:23:21
:/

Выделить код

Код:

function handleClick(e) {
    
   if ( e.button == 0 && content.location.host == "forum.mozilla-russia.org" ) {
        var url = XULBrowserWindow.overLink;
        if ( !url || url.startsWith("javascript") || url.match(/:\/\/(.[^/]+)/)[1] == "forum.mozilla-russia.org" ) return;
        gBrowser.loadOneTab( url, {relatedToCurrent: true, inBackground: true, referrerURI: makeURI(content.location.href)} );
        }    
};
addEventListener('click', handleClick, true, gBrowser );

Отредактировано bunda1 (11-01-2014 22:23:21)

Отсутствует

 

№733911-01-2014 22:51:36

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет:

Выделить код

Код:

function handleClick(e) {
    
   if ( e.button == 0 && content.location.host == "forum.mozilla-russia.org" ) {
        var url = XULBrowserWindow.overLink;
        if ( !url || url.startsWith("javascript") || url.match(/:\/\/(.[^/]+)/)[1] == "forum.mozilla-russia.org" ) return;
        gBrowser.loadOneTab( url, {relatedToCurrent: true, inBackground: true, referrerURI: makeURI(content.location.href)} );
        }    
};
addEventListener('click', handleClick, true, gBrowser );

Код получился отличный! Но для меня удобнее если у ссылки будет атрибут target="_blank" - тогда ссылка выделяется цветом (в стилях у меня прописано a:hover...)
Т. е. я подвожу к ссылке курсор и уже вижу где она откроется.

Я подумал, а что если в моём коде заменить

Выделить код

Код:

if (lnk[i].host !== 'forum.mozilla-russia.org')
         lnk[i].setAttribute("target", "_blank")

на

Выделить код

Код:

if (lnk[i].host !== 'forum.mozilla-russia.org')
        lnk[i].onmouseover=function(){this.setAttribute("target", "_blank")}

чтобы атрибут присваивался не всем внешним ссылкам скопом, а только той которая под курсором. Это даст какой-то выигрыш?

Отсутствует

 

№734011-01-2014 23:18:31

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

Re: Custom Buttons

Чайник пишет:

чтобы атрибут присваивался не всем внешним ссылкам скопом, а только той которая под курсором. Это даст какой-то выигрыш?

Выигрыша не будет потому что код все равно проверит все ссылки на странице и что то к ним добавит.

Отсутствует

 

№734112-01-2014 14:48:33

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

okkamas_knife пишет:

а если такой вариант?
ставим листенер на смену урлбара и проверяем текущий адрес
если это форум то запускаем листенер на маузовер и по маузоверу добавляем таргет бланк(проверив ссылку ессно)
если это не форум то убиваем листенер маузовера и ничего не делаем.

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

Выделить код

Код:

var myExt_urlBarListener = {
  QueryInterface: function(aIID)
  {
   if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
       aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
       aIID.equals(Components.interfaces.nsISupports))
     return this;
   throw Components.results.NS_NOINTERFACE;
  },

  onLocationChange: function(aProgress, aRequest, aURI)
  {
   setTimeout(urlbarvaluechanged, 300);    
  },

  onStateChange: function(a, b, c, d) {},
  onProgressChange: function(a, b, c, d, e, f) {},
  onStatusChange: function(a, b, c, d) {},
  onSecurityChange: function(a, b, c) {}
};

gBrowser.addProgressListener(myExt_urlBarListener,Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
function urlbarvaluechanged(){
       if ( content.location.host === "forum.mozilla-russia.org" ) {
         content.document.addEventListener('mouseover', function setAttr(e){
            if(e.target.tagName=='A' && e.target.host !== 'forum.mozilla-russia.org')
              e.target.setAttribute("target", "_blank")
           })
       }
      else content.document.removeEventListener('mouseover', setAttr)
   
 }

Отсутствует

 

№734212-01-2014 15:41:35

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

Работает! :D

Этот код должен быть легче моего предыдущего с TabAttrModified или с DOMContentLoaded?

Кстати, из листенера на смену урлбара ничего не надо удалять, а то я ведь целиком скопировал один к одному?

Отсутствует

 

№734312-01-2014 20:48:01

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

Re: Custom Buttons

Чайник пишет:

Работает! :D
Этот код должен быть легче моего предыдущего с TabAttrModified или с DOMContentLoaded?
Кстати, из листенера на смену урлбара ничего не надо удалять, а то я ведь целиком скопировал один к одному?

Не легче предыдущего:
1. в коде ошибка else content.document.removeEventListener('mouseover', setAttr) не видит функцию setAttr и вообще не нужен, всегда смотри в консоль ошибок,
2. при открытии настройки панелей и тп. обработчик gBrowser.addProgressListener будет бесконечно дублироваться и запускать многократно функцию setAttr, что бы избежать этого нужен деструктор addDestructor и удаление лишнего обработчика, используя для этого removeProgressListener

Выделить код

Код:

var progressListener = { onLocationChange: function(aWebProgress, aRequest, aFlag, aStatus) {
       LOG("1");
       }};
gBrowser.addProgressListener( progressListener );
addDestructor(function() { gBrowser.removeProgressListener( progressListener ) });

3. обработчик content.document.addEventListener('mouseover', function setAttr(e){.. при каждой переключении на вкладку нашего форума тоже будет дублироватся,
4. такой код поменяет цвет внешние ссылок на форуме только при наведении курсора, кажется для тебя это важно,
5. ну и так далее.

Отредактировано bunda1 (12-01-2014 20:48:55)

Отсутствует

 

№734412-01-2014 21:48:57

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 25.0

Re: Custom Buttons

bunda1 пишет:

в коде ошибка else content.document.removeEventListener('mouseover', setAttr) не видит функцию setAttr и вообще не нужен, всегда смотри в консоль ошибок,

Я видел в консоли "setAttr is not defined".
А почему else content.document.removeEventListener('mouseover', setAttr) не видит функцию (сейчас речь не о том, нужен он или нет), в чём тут ошибка?

***********************************************************

bunda1 пишет:

Не легче предыдущего:
1.
2.
3.
4.
5.

:(
Короче, учитывая всё сказанное, не стоило огород городить? Разумнее оставаться с листенером TabAttrModified как было изначально?

Отредактировано Чайник (12-01-2014 21:52:54)

Отсутствует

 

№734512-01-2014 22:10:22

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

Re: Custom Buttons

Чайник пишет:

Я видел в консоли "setAttr is not defined".
А почему не видит функцию (сейчас речь не о том, нужен он или нет), в чём тут ошибка?
Короче, учитывая всё сказанное, не стоило огород городить? Разумнее оставаться с листенером TabAttrModified как было изначально?

Почему не видит не знаю. Я думаю что можно оставаться с листенером TabAttrModified, заодно из него можно другие полезные коды запускать.

Добавлено 12-01-2014 22:12:32

okkamas_knife пишет:

ну дык подскажи как избежать это.
насчет деструктора и панели - можешь написать дополнение к  коду что в сниппетах чтоб он был корректный? а я поправлю сниппет

Завтра.

Отредактировано bunda1 (12-01-2014 22:12:59)

Отсутствует

 

№734612-01-2014 22:41:02

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

Re: Custom Buttons

Чайник пишет:

А почему else content.document.removeEventListener('mouseover', setAttr) не видит функцию (сейчас речь не о том, нужен он или нет), в чём тут ошибка?

Потому что при таком использовании функция доступна по своему имени только изнутри этой же функции.

Выделить код

Код:

var res = [];

res.push("Before, f1: " + typeof f1 + ", f2: " + typeof f2 + ", f3: " + typeof f3);
var f1 = function f2() {
    res.push("f1(), f1 == f2: " + (f1 == f2));
};
function f3() {
}
res.push("After, f1: " + typeof f1 + ", f2: " + typeof f2 + ", f3: " + typeof f3);
function f4(f) {
    res.push("f4(f)");
    f();
}
f4(function f5() {
    res.push("f5()");
});
res.push("f4: " + typeof f4 + ", f5: " + typeof f5);

alert(res.join("\n"));

А во-вторых, объявлять функции внутри блоков типа if() лучше через var, поведение для

Выделить код

Код:

if(true) {
    function f1() {}
    f1();
}
else {
    function f2() {}
    f2();
}
alert(typeof f1 + " " + typeof f2);

зависит от браузера (и только в Firefox f2 будет undefined).
Одно время, кажется, предупреждение в консоль выдавалось, но, видимо, передумали. :)
https://developer.mozilla.org/en-US/doc … a_function


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

Отсутствует

 

№734714-01-2014 00:23:30

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

Re: Custom Buttons

okkamas_knife пишет:

насчет деструктора и панели - можешь написать дополнение к  коду что в сниппетах чтоб он был корректный? а я поправлю сниппет

:/ вот что то намутил:

Выделить код

Код:

// Отслеживать переключение, загрузку, изменение текущей вкладки ................................
var main = {
    // если текущая страница изменился( загрузка, переход по истории, тп.) ....
    onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {       
       if ( !aWebProgress.DOMWindow.document.location.protocol.startsWith("http") ) return; // стоп если внутренние страницы FF

       // если уже загруженная текущая страница
       if ( aFlag & Ci.nsIWebProgressListener.STATE_STOP ) {
            
            // запуск кода или функции если текущая вкладка изменился
            custombuttons.alertSlide("Вкладка изменилась:  ", aWebProgress.DOMWindow.document.title );            
            
            // получить полезные данные для работы с обработчиком
            LOG('uri1:   ' + content.location.href );
            LOG('uri2:   ' + aWebProgress.DOMWindow.document.documentURI );
            LOG('name:   ' + aRequest.name );
            LOG('loadFlags:   ' + aRequest.loadFlags );
            LOG('title:   ' + aWebProgress.DOMWindow.document.title );
            LOG('location:   ' + aWebProgress.DOMWindow.document.location );
            LOG('STATE_REQUEST:   ' + Ci.nsIWebProgress.NOTIFY_STATE_REQUEST );
            LOG('STATE_DOCUMENT :   ' + Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT );
            LOG('readyState :   ' + aWebProgress.DOMWindow.document.readyState);
            
            // LOG('uri2:   ' + aWebProgress.currentURI.spec );
            // aWebProgress.DOMWindow.close()    
            }    
    },
    
    // если текущий адрес изменился ....
    onLocationChange: function(aWebProgress, aRequest, aURI) {
       if ( aRequest ) return; // стоп если это не переключение на другую вкладку
       if ( !aURI.spec.startsWith("http") ) return; // стоп если внутренние страницы FF
       if ( aWebProgress.DOMWindow.document.readyState !== 'complete' ) return; // стоп если текущая страница еще не загружена

       // запуск кода или функции при переключение на другую вкладку
       custombuttons.alertSlide("Переключился на:  ", aWebProgress.DOMWindow.document.title );        
       
       // получить полезные данные для работы с обработчиком
       LOG('uri1:   ' + aURI.spec );
       LOG('uri2:   ' + aWebProgress.currentURI.spec );
       LOG('loading:   ' + aWebProgress.isLoadingDocument ); 
       LOG('title:   ' + aWebProgress.DOMWindow.document.title );
       LOG('location:   ' + aWebProgress.DOMWindow.document.location );
    }
};
gBrowser.addProgressListener( main );
addDestructor(function() { gBrowser.removeProgressListener( main ) });

Добавлено 14-01-2014 00:29:22
Это кажется единственный обработчик который кроме загрузки и переключении вкладки отслеживает и переход по истории вкладки и переход по результатам поиска в поисковиках и даже работу расширений и скриптов типа AutoPagerize.

Добавлено 14-01-2014 00:40:24
Но есть недостатки - по не понятным причинам может срабатывать при переключении на другую уже загруженную вкладку сразу 2-3 раза или срабатывает при скроллинге страницы или срабатывает без видимой причини на загруженной вкладке(возможно там скрипты что меняют на странице) :(

Отредактировано bunda1 (14-01-2014 00:54:23)

Отсутствует

 

№734814-01-2014 02:16:00

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

Re: Custom Buttons

bunda1 а что значит это a в начале — aURI.spec, aRequest?

Отсутствует

 

№734914-01-2014 19:32:26

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

Re: Custom Buttons

rbfyec пишет:

bunda1 а что значит это a в начале — aURI.spec, aRequest?

Я думаю что в данном случае a в начале ничего не значит, просто обработчик gBrowser.addProgressListener передаёт соответствующие аргументы в функцию onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { ..... или в onLocationChange: function(aWebProgress, aRequest, aURI) {..... и их можно назвать как хочешь, хоть function(a, b, c, d) { .....

Отредактировано bunda1 (14-01-2014 19:33:47)

Отсутствует

 

№735014-01-2014 21:33:37

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
UA: Firefox 29.0

Re: Custom Buttons

bunda1
В [nightly] перестало работать добавление и удаление закладок двойным ПКМ. Можешь поправить?

Отсутствует

 

Board footer

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