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

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

№942623-01-2016 23:28:40

OmTatSat
Участник
 
Группа: Members
Зарегистрирован: 25-06-2015
Сообщений: 82
UA: Firefox 39.0

Re: Custom Buttons

Здравствуйте, помогите пожалуйста добавить в код поиск по закладкам

Выделить код

Код:

/*Initialization Code*/
gBrowser.currentURI.spec == "about:customizing" || (popupset => {
    var data = {
          "folder=TOOLBAR":           {code: "KeyB", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "folder=BOOKMARKS_MENU":    {code: "KeyM", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "folder=UNFILED_BOOKMARKS": {code: "KeyU", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
        , "sort=8&maxResults=16":     {code: "KeyN", ctrlKey: false, shiftKey: true, altKey: true, metaKey: false}
    };
    popupset.id = "CB" + _id.slice(20) + "-popupset";
    addDestructor(() => popupset.remove());

    var popups = [];
    for(var [place, shortcut] in Iterator(data)) {
        var box = popupset.appendChild(document.createElement("box"));
        var popup = box.appendChild(document.createElement("menupopup"));
        for(var [attributeName, attributeValue] in Iterator({

            placespopup:          "true",
            context:              "placesContext",
            openInTabs:           "children",
            tooltip:              "bhTooltip",
            popupsinherittooltip: "true",
            onpopupshowing:       "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:" + place + "');",
            oncommand:            "BookmarksEventHandler.onCommand(event, this.parentNode._placesView);",
            onclick:              "BookmarksEventHandler.onClick(event, this.parentNode._placesView);"

        })) popup.setAttribute(attributeName, attributeValue);
        popups.push(popup); popup.shortcut = shortcut;
    }
    var x, y; addEventListener("mousemove", e => {x = e.screenX; y = e.screenY});
    addEventListener("keydown", e => {
        popups.some(popup => {
            for(var property in popup.shortcut) {
                if (popup.shortcut[property] != e[property]) return false;
            }
            e.preventDefault(); e.stopPropagation(); e.stopImmediatePropagation();
            popup.openPopupAtScreen(x, y + 1); return true;
        });
    }, true);
})(document.documentElement.appendChild(document.createElement("popupset")));

Отсутствует

 

№942725-01-2016 06:24:14

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 43.0

Re: Custom Buttons

Повторюсь...

bunda1 и Dumby  А где/как хранится/взять что была ошибка на странице?

В коде

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

Выделить код

Код:

(id => {
    var observer, en = Services.obs.enumerateObservers("domwindowopened");
    while(en.hasMoreElements()) {
        var obs = en.getNext();
        obs = "wrappedJSObject" in obs && obs.wrappedJSObject;
        if (obs && obs.id == id) {observer = obs; break;}
    }
    if (!observer) {
        observer = {
            id: id,
            get wrappedJSObject() {
                return this;
            },
            init: function() {
                Services.obs.addObserver(this, "domwindowopened", false);
                this.initialized = true;
            },
            destroy: function() {
                if (!this.initialized) return;
                this.initialized = false;
                Services.obs.removeObserver(this, "domwindowopened");
            },
            observe: function(win) {
                win.addEventListener("beforeunload", this, false);
            },
            handleEvent: function(e) {
                var win = e.target.defaultView;
                win.removeEventListener("beforeunload", this, false);
                win.arguments && win.arguments[0] && this.checkWin(win);
            },
            checkWin: function(win) {
                var [arg] = win.arguments;
                try {arg.QueryInterface(Ci.nsIPropertyBag)} catch(ex) {return;}
                arg.getProperty("title") == this.title && win.close();
            },
            get title() {
                delete this.title;
                return this.title = Cc["@mozilla.org/intl/stringbundle;1"]
                    .getService(Ci.nsIStringBundleService)
                    .createBundle("chrome://global/locale/dom/dom.properties")
                    .GetStringFromName("KillScriptTitle");
            }
        };
        observer.init();
    }
    addDestructor(reason => {
        if (reason == "update" || reason == "delete") observer.destroy()
    }, observer);
})("killScriptCloser_" + _id);


Просто он очень часто срабатывает... может быть очень часто... IMHO.


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№942825-01-2016 11:23:05

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

Re: Custom Buttons

Indomito пишет

А где/как хранится/взять что была ошибка на странице?
В коде
Просто он очень часто срабатывает... может быть очень часто... IMHO.

Не понял. Код не предназначен для практического использования.
Просто, насколько я понял, bunda1 хотел закрыть определённый commonDialog,
но возникли затруднения. Вот я и нахлобучил его вариантом. Только и всего.

скрытый текст
Вообще-то, у меня на Firefox 43, Консоль Ошибок выдаёт предупреждение

Error: Script terminated by timeout at: ...

Но если прям интересно, то можно повторить как сообщение

Выделить код

Код:

//arg.getProperty("title") == this.title && win.close();
                if (arg.getProperty("title") == this.title) {
                    win.close();
                    LOG(arg.getProperty("text"));
                }

Отсутствует

 

№942925-01-2016 11:25:10

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

Re: Custom Buttons

Indomito пишет

А где/как хранится/взять что была ошибка на странице?

Замени win.close(); на win.close( LOG("Ошибка:  " + new Date()) ); и смотри в консоли ошибок - chrome://global/content/console.xul сообщения. Но вряд ли таких ошибок будет много у меня например таких ошибок не бывает.

Добавлено 25-01-2016 11:27:03

Dumby пишет

Просто, насколько я понял, bunda1 хотел закрыть определённый commonDialog,
но возникли затруднения. Вот я и нахлобучил его вариантом. Только и всего.

И за это спасибо.

Отредактировано bunda1 (25-01-2016 11:27:03)

Отсутствует

 

№943025-01-2016 22:11:41

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Выполнил кривую кнопку. После этого перестал открывать редактор кнопок, новые не добавляются. Перезапустил файрфокс - исчезли мои старые кнопки, создать все так же не могу. Пробовал переустановить аддон - эффекта не принесло. Что делать?

Отсутствует

 

№943125-01-2016 22:36:49

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

Re: Custom Buttons

DarkMasterW пишет

Пробовал переустановить аддон - эффекта не принесло. Что делать?

Удали из профиля Firefox папку custombuttons и переустановиви Custom Buttons.

Отсутствует

 

№943225-01-2016 22:46:29

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 43.0

Re: Custom Buttons

DarkMasterW проверь файл в профиле - C:\Users\SASA\AppData\Roaming\Mozilla\Firefox\Profiles\ox7niog3.MAIN\custombuttons -> buttonsoverlay.xul и там же есть папка backup. Если ошибка не была критической, то всё можно восстановить, просто файл buttonsoverlay.xul с нарушенной структурой, но в ручную это восстанавливается — я это делал многократно.... всякое бывало. :)

bunda1 пишет

Удали из профиля Firefox папку custombuttons и переустановиви Custom Buttons.

Да, и так я тоже делал... т.е. достойный/нормальный вариант решения проблемы.



bunda1 и Dumby  Повторюсь, но перефразируя — Как включить/выключить скрипт убирающий — Ошибка на странице?  Пока помогает только комментирование скрипта.

Отредактировано Indomito (25-01-2016 22:58:50)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№943326-01-2016 02:17:40

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Спасибо, помогло.
Промучился всю ночь, так и не понял почему в консоли работает, а в кнопке нет:

Выделить код

Код:

window.alert("1");

    var range = document.createRange();

    window.alert("2");
    
    var endNode = document.getElementsByTagName("p").item(4);
    window.alert("22");
    range.setStart(endNode, 0);
    
    window.alert("2");

    
    var endNode = document.getElementsByTagName("p").item(6);

    window.alert("3");
    range.setEnd(endNode, 0);
    
    window.alert("3");
    
    var str = range.toString();
    
    window.alert(str);

Вот эта строка приводит к обрыву выполнения скрипта:
range.setStart(endNode, 0);
Можно как-то увидеть собщение об ошибке? Try/catch или не срабатывает или мои попытки его использовать были кривыми...

Отсутствует

 

№943426-01-2016 08:27:01

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

Re: Custom Buttons

DarkMasterW пишет

Можно как-то увидеть собщение об ошибке? Try/catch или не срабатывает или мои попытки его использовать были кривыми...

Выделить код

Код:

Метка времени: 26.01.2016 7:26:46
Ошибка: TypeError: Argument 1 of Range.setStart is not an object.
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button94@code
Строка: 9

Отсутствует

 

№943526-01-2016 09:12:03

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Как было получено это сообщение об ошибке? У меня просто тихо помирает.
Почему внутри кнопки внезапно объект перестает быть объектом? Есть подозрение, что из кнопки нода просто не находится в отличии от консоли. Возможно необходимо как-то дополнительно сослаться, где именно искать? Документ/какая из вкладок и т.д.?

Отсутствует

 

№943626-01-2016 09:39:01

Saenko
Участник
 
Группа: Members
Зарегистрирован: 03-11-2012
Сообщений: 141
UA: Firefox 44.0

Re: Custom Buttons

Доброго дня, парни..! Обновился до 44-й и ни одна кнопка не работает ( Я один такой "счастливчик"?

Отсутствует

 

№943726-01-2016 11:02:13

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

Re: Custom Buttons

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

Код:

var endNode = document.getElementsByTagName("p").item(4);

Вот тут и во всех прочих местах при работе из кнопки document будет указывать не на страницу, а на документ окна браузера.
Надо заменить на content.document.

скрытый текст
Правда, придет e10s и все поломает...
Можно использовать

Выделить код

Код:

var contentDoc = gBrowser.contentDocument || gBrowser.contentDocumentAsCPOW;

Но все *AsCPOW тоже грозятся выпилить.
Впрочем, можно переделать через frame-скрипт (который до сих пор нельзя выгрузить, да – здравствуйте, утечки памяти).


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

Отсутствует

 

№943826-01-2016 12:06:16

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

Re: Custom Buttons

Saenko пишет

Доброго дня, парни..! Обновился до 44-й и ни одна кнопка не работает ( Я один такой "счастливчик"?

Это известная проблема: в about:config переключи xpinstall.signatures.required на false, потом 21-12-2015 23:35:52 или 09-10-2015 12:29:01

Отсутствует

 

№943926-01-2016 12:52:46

Saenko
Участник
 
Группа: Members
Зарегистрирован: 03-11-2012
Сообщений: 141
UA: Firefox 44.0

Re: Custom Buttons

bunda1 :beer:

Отсутствует

 

№944026-01-2016 16:05:34

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

Re: Custom Buttons

Indomito пишет

bunda1 Повторюсь, но перефразируя — Как включить/выключить скрипт убирающий — Ошибка на странице?  Пока помогает только комментирование скрипта.

По простому:

Выделить код

Код:

(id => {
    self._handleClick =()=> self.checked = !self.checked;

    var observer, en = Services.obs.enumerateObservers("domwindowopened");
    while(en.hasMoreElements()) {
        var obs = en.getNext();
        obs = "wrappedJSObject" in obs && obs.wrappedJSObject;
        if (obs && obs.id == id) {observer = obs; break;}
    }
    if (!observer) {
        observer = {
            id: id,
            get wrappedJSObject() {
                return this;
            },
            init: function() {
                Services.obs.addObserver(this, "domwindowopened", false);
                this.initialized = true;
            },
            destroy: function() {
                if (!this.initialized) return;
                this.initialized = false;
                Services.obs.removeObserver(this, "domwindowopened");
            },
            observe: function(win) {
                win.addEventListener("beforeunload", this, false);
            },
            handleEvent: function(e) {
                var win = e.target.defaultView;
                win.removeEventListener("beforeunload", this, false);
                win.arguments && win.arguments[0] && this.checkWin(win);
            },
            checkWin: function(win) {
                var [arg] = win.arguments;
                try {arg.QueryInterface(Ci.nsIPropertyBag)} catch(ex) {return;}
                arg.getProperty("title") == this.title && self.checked && win.close();
            },
            get title() {
                delete this.title;
                return this.title = Cc["@mozilla.org/intl/stringbundle;1"]
                    .getService(Ci.nsIStringBundleService)
                    .createBundle("chrome://global/locale/dom/dom.properties")
                    .GetStringFromName("KillScriptTitle");
            }
        };
        observer.init();
    }
    addDestructor(reason => {
        if (reason == "update" || reason == "delete") observer.destroy()
    }, observer);
})("killScriptCloser_" + _id);

Нажимаешь на кнопку и скрипт работает, нажимаешь еще и не работает, ну и так далее.

Отсутствует

 

№944126-01-2016 17:07:26

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Метка времени: 26.01.2016 7:26:46
Ошибка: TypeError: Argument 1 of Range.setStart is not an object.
Источник: chrome://custombuttons-context/content/button.js?windowId=Firefox&id=custombuttons-button94@code
Строка: 9

А как текст ошибки то был получен? Отладка вслепую не очень продуктивна...

Вот тут и во всех прочих местах при работе из кнопки document будет указывать не на страницу, а на документ окна браузера.
Надо заменить на content.document.

Спасибо, заработало :) А кнопка нажатая на разных вкладках продолжит работать для каждой вкладки независимо? Т.е. будет некий цикл бесконечный. Если я запущу его на вкладке 1, то это как-то отразится на вкладке 2? Будет ли  возможность запустить независимую копию скрипта на вкладке 3?

Отсутствует

 

№944226-01-2016 17:12:03

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

Re: Custom Buttons

DarkMasterW пишет

А как текст ошибки то был получен? Отладка вслепую не очень продуктивна...

Открываешь консоль ошибок: chrome://global/content/console.xul и смотришь.

Отсутствует

 

№944326-01-2016 20:58:58

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Вроде даже пошло помаленьку :) Подскажите, если не сложно, еще один момент. Написал копирование текста со страницы: копирует, выводит алертом корректно. Написал сохранение в файл: ввожу строку, сохраняю, файл дописывается, все прекрасно. Однако если стринг с содержимым страницы сохранить, то получается несусветный бред. Причем я даже таких кодировок не видел никогда. В чем фишка?

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

Выделить код

Код:

//    window.alert("1");
    var range = content.document.createRange();
//    window.alert("2");
    var endNode = content.document.getElementsByTagName("div").item(3);
//    window.alert("3");
//    window.alert(endNode);
//    window.alert("4");
    range.setStart(endNode, 0);
//    window.alert("5");
    var endNode = content.document.getElementsByTagName("div").item(3);
//    window.alert("6");
    range.setEndAfter(endNode, 0);
//    window.alert("7");
//    window.alert(endNode);
//    window.alert(8);
    var str = range.toString();
//    window.alert(9);//    window.alert(str);//    window.alert(10);
    timestamp = (new Date()).toLocaleFormat("%Y.%d.%m - %H:%M:%S");
//    window.alert(timestamp);
    str = timestamp + "\r\n" + str;
    window.alert(str);
    
//    converter.charset = "UTF-8";
//    str = converter.convertToInputStream(str);
    
//str = "ywfpywfpywfp";

var aFile = Components.classes["@mozilla.org/file/local;1"].
            createInstance(Components.interfaces.nsILocalFile);

//window.alert("1");
aFile.initWithPath( "d:\\1.txt" );

var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].
             createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(aFile, 0x02 | 0x08 | 0x10, 0666, 0); // readwrite, create, truncate        
stream.write(str, str.length);
if (stream instanceof Components.interfaces.nsISafeOutputStream) {
    stream.finish();
} else {
    stream.close();

}


реальная строка:
ДискКалендарьПереводчикДля мобильногоКошелекBloggerФотографииВидеоДокументыВсе продукты »
вывод в файл(есть неотображаемые символы):
8A:0;5=40@L5@52>4G8:;O <>18;L=>3>>H5;5:Blogger$>B>3@0D88845>>:C<5=BKA5 ?@>4C:BK »
в hex:

Выделить код

Код:

0D0A1438413A1A303B353D3430404C1F354035323E3447383A143B4F203C3E31383B4C3D3E333E1A3E48353B353A426C6F67676572243E423E334030443838123834353E143E3A433C353D424B124135203F403E34433A424B20BB

Отредактировано DarkMasterW (26-01-2016 21:23:06)

Отсутствует

 

№944426-01-2016 22:12:12

pag77
Участник
 
Группа: Extensions
Зарегистрирован: 20-03-2012
Сообщений: 1657
UA: Firefox 44.0

Re: Custom Buttons

Всё... Сегодня приплыл Firefox 44 и оригинальный CustomButtons уже не работает.
для восстановления работоспособности:

1.
откройте about:config
найдите параметр xpinstall.signatures.required и установите его значение в false

2.
скачайте архив из первого собщения этого форума:
http://custombuttons.sourceforge.net/fo … f=5&t=3656

3.
переименуйте скачанный архив из zip в xpi

4.
установите аддон (удалять оригинальный нет необходимости - новый аддон встанет поверх него)

с выходом FF45 , если авторы не обновят версию или кто-то не создаст подписанный xpi - про CustomButtons можно забыть

Отсутствует

 

№944526-01-2016 23:11:14

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

Re: Custom Buttons

DarkMasterW пишет

реальная строка:
ДискКалендарьПереводчикДля мобильногоКошелекBloggerФотографииВидеоДокументыВсе продукты »

А вот если просто записать твой текст на десктоп то он отображается без проблем:

Выделить код

Код:

var timestamp = (new Date()).toLocaleFormat("%Y.%d.%m - %H:%M:%S");
var str = timestamp + "\r\n" + "ДискКалендарьПереводчикДля мобильногоКошелекBloggerФотографииВидеоДокументыВсе продукты";
window.alert(str);
var str = convertFromUnicode("UTF-8", str);

var file = Services.dirsvc.get('Desk', Components.interfaces.nsIFile);
file.append("1.txt");
var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(file, 0x02|0x08|0x20, 0666, 0);
stream.write(str, str.length);
stream.close(); 

file.launch();

Странно, в чём тут разница :/.

Отсутствует

 

№944626-01-2016 23:31:27

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

вот здесь:

var str = convertFromUnicode("UTF-8", str);

Правда из чего он конвертирует, честно, не понимаю.

Отсутствует

 

№944727-01-2016 05:52:09

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 43.0

Re: Custom Buttons

pag77 Дело не в FF 44, а креше 44-й версии,  такого давно не было(частота падений) + они палитру поменял... это я вообще не понял. Думаю 45-я версия будет ужасной... или же баги отловят — увидим. ;)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№944827-01-2016 10:04:22

pag77
Участник
 
Группа: Extensions
Зарегистрирован: 20-03-2012
Сообщений: 1657
UA: Firefox 44.0

Re: Custom Buttons

Indomito пишет

pag77 Дело не в FF 44, а креше 44-й версии,  такого давно не было(частота падений) + они палитру поменял... это я вообще не понял. Думаю 45-я версия будет ужасной... или же баги отловят — увидим.

Для рядового пользователя, которых очень много среди  81 239 пользователей, наплевать на то что в FF44 что-то поменялось - это проблема аддона, которую надо исправить.
Вот уже и отзывы появились о проблеме с 44:
https://addons.mozilla.org/ru/firefox/a … s/reviews/

Отсутствует

 

№944927-01-2016 15:50:56

DarkMasterW
Участник
 
Группа: Members
Зарегистрирован: 25-12-2011
Сообщений: 103
UA: Firefox 27.0

Re: Custom Buttons

Есть скрипт, есть кнопка. Кнопка включает/выключает работу скрипта через создание/удаление таймера. Все шуршит. Однако если сменить вкладку, то работа скрипта будет продолжена уже с другим документом. Насколько я понимаю необходимо content.document применить к вкладке полученной через gBrowser. Тем не менее остается вопрос, как наиболее грамотно будет сделать функционал кнопки привязанным к вкладке?  Возможно ли как-то ограничиться областями видимости для создания флагов вкл/выкл скрипт или придется заводить глобальный массив с таймерами, ассоциировать каждую вкладку с некоторым элементом массива в котором будет храниться ид таймера и ссылка на объект вкладки?

Отсутствует

 

№945027-01-2016 17:25:35

LittleMontana
Участник
 
Группа: Members
Зарегистрирован: 16-11-2013
Сообщений: 214
UA: Firefox 43.0

Re: Custom Buttons

ищу кнопку (я так понимаю, код инициализации), которая позволяет по двойному щелчку ЛКМ на активной вкладки перейти в начало страницы (эквивалент кнопки Home на клавиатуре). Спасибо!!

Отсутствует

 

Board footer

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