Cheatah: XUL: Firefox-Erweiterung mit Kontextmenü

Beitrag lesen

Hi,

ich arbeite gerade an einer simplen Firefox-Erweiterung, die der Menubar einen Eintrag hinzufügen soll, was soweit auch kein Problem ist:

<?xml version="1.0"?>
<overlay [...]>
    <menubar id="main-menubar">
        <menu id="foo-menu" label="Foobar" insertafter="bookmarks-menu">
            <menupopup id="foo-menu-popup">
                <menuitem type="radio" label="Foo" checked="true"/>
                <menuitem type="radio" label="Bar" checked="false"/>
            </menupopup>
        </menu>
    </menubar>
</overlay>

(Dies, in einen XPI-Kontext gebracht, lässt sich wunderbar installieren und bringt nach einem Browser-Neustart ein "Foobar"-Menü mit zwei Einträgen hinter dem Bookmarks-Menü hervor.)

Nun möchte ich, dass die Menu-Items ein Kontextmenü besitzen. Nach meinen Recherchen benötige ich dazu innerhalb des <overlay>-Elements:

<popupset>
    <popup id="foo-context">
        <menuitem [...] />
    </popup>
</popupset>

und referenziere dies an geeigneter Stelle mittels context="foo-context". Je nach Quelle, die ich konsultiere, kann es auch mal ein contextmenu-Attribut und/oder ein <menupopup> statt <popup> sein. Meine Versuche, egal in welcher Kombination und egal, an welcher Stelle ich das Attribut unterbrachte (von <menubar> bis runter zu <menuitem>), blieben allerdings erfolgfrei.

Also habe ich mir als Beispiel die Bookmarks angesehen, die in Firefox per se über ein Kontextmenü verfügen. Dafür zuständig scheint mir die Datei browser.xul innerhalb chrome/browser.jar zu sein. Leider sind mir die Zusammenhänge nicht vollständig klar. Soweit ich es verstehe, ist die Basis das <menu id="bookmarks-menu">, in welchem a) ein <menupopup> mit contextmenu-Attribut besteht, das b) via template="bookmarks-template" befüllt wird. Das Element, welches vom contextmenu-Attribut referenziert wird, ist:

<menupopup id="bookmarks-context-menu"
           onpopupshowing="return BookmarksMenu.createContextMenu(event);"
           onpopuphidden ="BookmarksMenu.destroyContextMenu(event);"/>

Was BookmarksMenu.createContextMenu() macht, habe ich noch nicht ganz durchschaut. Leider ist es bei mir aber so, dass eine entsprechende, mit alert(1) gefüllte Funktion erst gar nicht aufgerufen wird (obwohl die JavaScript-Datei natürlich eingebunden ist ;-), egal wie ich meinen XUL-Code gestalte. Daher gehe ich davon aus, dass ich noch einen sehr grundlegenden Fehler mache. Fällt dieser jemandem hier auf? Welche XUL-helfenden Quellen außer XUL-Planet, dem Mozillazine-Forum und der Mozilla-XUL-Referenz gibt es? Und kann mir jemand eine Firefox-Erweiterung empfehlen, welche mir als Vorlage für mein Vorhaben dienen könnte?

Cheatah

P.S.: Es dürfte irrelevant sein, aber es geht um den aktuellsten Firefox unter Windows, Einsatz im Intranet.

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes