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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№126-05-2016 17:21:02

jorevo
Участник
 
Группа: Members
Зарегистрирован: 12-05-2005
Сообщений: 7
UA: Firefox 46.0

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

Есть расширение https://addons.mozilla.org/en-US/firefox/addon/simplefill/ - под мои задачи почти полностью устраивает (заполнение форм из контекстного меню). Единственное неудобство, список полей раскрывается в дочернем меню, а я хотел бы видеть поля - в главном контестном меню. Немного переписал функцию по выводу полей в меню, получилось так:

Выделить код

Код:

function createChildContextMenus(jsonString) {
    if (typeof jsonString !== 'undefined' && jsonString !== null && ss.storage.jsonString !== 'null' && jsonString !== "") {
        var jsonObj = JSON.parse(jsonString);
        if (typeof jsonObj.cm_items !== 'undefined' && jsonObj.cm_items.length > 0) {
            for(var i = 0; i < jsonObj.cm_items.length; i++) {
                cm.Item({
                    label: jsonObj.cm_items[i].title,
                    context: cm.SelectorContext("body"),
                    contentScript: 'self.on("click", function (node,data) {' +
                                   'document.activeElement.value="' + jsonObj.cm_items[i].info + '"' +
                                   '});'
                });
            }
        }
    }  
}

Всё вроде бы заработало, пункты меню соответствующие заполненым полям появились... и всё работает до добавления нового поля, удаления какого то, ну или просто изменения в на полях (например просто залезть в настройки полей и сохранить) .

После этого из основного контекстного меню все мои пункты пропадают, появляется пункт add-ons и все мои пункты оказываются в дочернем меню этого пункта. Что уже само по себе удивило, а при последующих изменениях в этом же субменю все пункты дублируются ещё раз и ещё! Всю голову уже сломал, как это победить. Насколько я понимаю надо перед вызовом  cm.Item({ чистить то что создалось при старте браузера, но как это сделать моих знаний увы не хватает. Если выше вставить cm.destroy(), то после вызова этого метода вообще ничего не создается. В документации прочитал про метод removeItem(Item), но примеров там нет и как его применить, так и не понял. Помогите плиз, а то мозг уже начал разрушаться.

Отсутствует

 

№227-05-2016 10:59:07

jorevo
Участник
 
Группа: Members
Зарегистрирован: 12-05-2005
Сообщений: 7
UA: Firefox 46.0

Re: Помогите разобраться с добавлением пунктов в контекстное меню

jorevo пишет

После этого из основного контекстного меню все мои пункты пропадают, появляется пункт add-ons и все мои пункты оказываются в дочернем меню этого пункта.

Вчера ещё немного помучал голову, вследствии чего обнаружил странное. Если в главное контестное меню добавлять до 10 пунктов, то всё нормально 10.png. Если пунктов больше 10, то как я писал выше, появляется пункт add-ons и все мои пункты переезжают в это субменю 11.png - Это какое то искусственное ограничение firefox? Его как то можно обойти?

Отсутствует

 

№327-05-2016 12:48:03

jorevo
Участник
 
Группа: Members
Зарегистрирован: 12-05-2005
Сообщений: 7
UA: Firefox 46.0

Re: Помогите разобраться с добавлением пунктов в контекстное меню

Частично победил! ) По умолчанию фаерфокс действительно позволяет создать не более 10 пунктов. Добавляем в about:cfg - extensions.addon-sdk.context-menu.overflowThreshold, присваиваем целое значение, например 20 - и всё заработало как надо. Осталось докопаться как пункты меню удалять перед повторным созданием!

Отредактировано jorevo (27-05-2016 12:48:38)

Отсутствует

 

Board footer

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