2016-05-14 20 views
1

Ich arbeitete an einem alten XUL-basierten Add-on und stellte fest, dass eine about.xul Datei in Verwendung war. Diese Datei wird von der Seite about:addons verwendet, wenn Sie mit der rechten Maustaste auf das Add-On klicken und im Kontextmenü Über auswählen. OK. Das Add-On hat ein Icon mit einem eigenen Kontextmenü, das auch über eine Option about verfügt, über die man auf die Datei about.xul von einem Menübefehl -> oncommand -> window.openDialog() zugreift.Externe XUL-Datei in Tableiste einspeisen

Noch einmal, das ist fair genug, ich kann die gleiche XUL-Datei unmodifiziert wiederverwenden. Aber diese zwei Optionen sind möglicherweise nicht so sichtbar für Benutzer. Das Add-on hat eine options.xul Datei mit einigen tabbox-> tabpanels. Ich dachte, es wäre toll, die about.xul-Datei ein drittes Mal wiederzuverwenden und einfach ein "About" -Panel hier hinzuzufügen.

Und dann wurde mir klar, das war vielleicht nicht so einfach wie ich dachte.

Antwort

1

Nach ein wenig Forschung, Versuch und Irrtum, fügte ich ein 3. <tab> und <tabpanel>, mit nur einem innen.

<tabs> 
    [other tabs] 
    <tab label="About"/> 
</tabs> 

<tabpanels> 
    [other tabpanels] 
    <tabpanel> 
     <iframe src="chrome://{GUID}/content/about.xul" flex="1"/> 
    </tabpanel> 
</tabpanel> 

Dies funktionierte tatsächlich und war viel einfacher als ich zunächst dachte.

In meinem speziellen Fall muss das CSS jedoch dynamisch geändert werden. Wenn die Seite "Info" im Bedienfeld "Optionen" aufgerufen wird, entspricht der Stil dem Optionsfeld und nicht dem Standard.

Nun müssen Sie nur noch die Standarddialogseite "Info" wiederherstellen, die angezeigt wird, wenn keine URL definiert ist. Dies ist eine Übung, um grundlegenden XUL-Code zu schreiben und CSS nach Bedarf dynamisch anzuwenden. All dies wird möglich durch das Lernen, XUL in XUL zu injizieren - eine einzelne Seite, die aus 3 Aufrufkontexten wiederverwendet wird. Dies schafft die Voraussetzungen, um fast die gesamte Seite dynamisch zu generieren, was mich auf die Migration in Richtung SDK und darüber hinaus vorbereitet hat.