Автоматическая установка кнопки панели инструментов на панель навигации Firefox, не работающая с insertItem - PullRequest
0 голосов
/ 09 марта 2012

Итак, я прочитал почти все, что смог найти в MDN, stackoverflow и т. Д., И кажется, что все устарело и / или не работает.Вот проблема:

Я хочу автоматически поместить «панель инструментов» моего расширения на панель навигации, когда она установлена, аналогично Chrome.То, что пользователь делает после этого, зависит от него, хотя, если вы удалите кнопку (с этим конкретным расширением), вы можете просто удалить расширение, поскольку без кнопки оно бесполезно.В любом случае ...

Кажется, есть два способа сделать это.Вы можете добавить его к «currentSet» и сделать так, чтобы он сохранялся, например так:

var currentset = document.getElementById("nav-bar").currentSet;
currentset=currentset + ",MYBUTTON_ID";
document.getElementById("nav-bar").setAttribute("currentset",currentset);
document.getElementById("nav-bar").currentSet = currentset;
document.persist("nav-bar","currentset");

Или вы можете использовать «insertItem» следующим образом:

var toolbar = document.getElementById("nav-bar");
toolbar.insertItem("MYBUTTON_ID", null);  
toolbar.setAttribute("currentset", toolbar.currentSet);  
document.persist(toolbar.id, "currentset");

Теперь, если яиспользуйте первый метод, он работает, но по какой-то причине он полностью стирает все остальное на панели навигации.«У currentSet», кажется, нет других кнопок навигационной панели, когда он перезаписывает ее, и поэтому я просто получаю навигационную панель по умолчанию и мою иконку.Удаление всех других кнопок пользователя не годится ...

Второй вариант не стирает другие параметры, но по какой-то причине способ "insertItem" не работаетвсе.Моя кнопка никогда не появляется в навигационной панели, точка.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 марта 2012

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

Когда загружается расширение и выполняется скрипт для установки кнопки,это сделано слишком рано.На момент выполнения «currentSet» содержит только кнопки по умолчанию.Другие кнопки расширения еще не загружены.В результате, если вы изменяете currentSet и сохраняете (сохраняете) его, вы стираете все остальные кнопки.

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

function installButton() {

    var navbar = document.getElementById("nav-bar");
    var newset = navbar.currentSet + ",MYBUTTONID";
    navbar.currentSet = newset;
    navbar.setAttribute("currentset", newset );
    document.persist("nav-bar", "currentset");

}

window.addEventListener("load", function () { installButton(); }, false);
0 голосов
/ 13 марта 2012

Хорошо, я использую этот код для добавления кнопки панели инструментов в navbar, но это работает только в первый раз для новой установки, а не для следующей установки, т.е. при обновлении аддона, когда пользователь может перемещать / перетаскивать значок на другой место нахождения. Итак, вам нужно попробовать это в новом профиле firefox . Вот код:

//plcae toolbar icon
var navbar = document.getElementById("nav-bar");
var newset = navbar.currentSet + ",MYBUTTON_ID";
navbar.currentSet = newset;
navbar.setAttribute("currentset", newset );
document.persist("nav-bar", "currentset"); 


и вот код для XUL Overlay:

<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="MYBUTTON_ID" inserbefore="searchBar" class="toolbarbutton-1 chromeclass-toolbar-additional"
    label="MYBUTTON_ID" tooltiptext="MYBUTTON_ID"
    onclick="MYBUTTON_ID()"/>
</toolbarpalette>



или вы можете заставить значок отображать на панели навигации против воли пользователя, это будет действовать после каждого перезапуска Firefox, однако не рекомендуется

var navbar = document.getElementById("nav-bar");

    var newset = navbar.currentSet;
    if (newset.indexOf("MYBUTTON_ID") == -1)
    {
        if (newset.indexOf("reload-button,stop-button,") > -1)
            newset = newset.replace("reload-button,stop-button,", "reload-button,stop-button,MYBUTTON_ID,");
        else
            newset = newset + ",MYBUTTON_ID";
        navbar.currentSet = newset;
        navbar.setAttribute("currentset", newset );
        document.persist("nav-bar", "currentset"); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...