Я пытаюсь создать простое дополнение для Zotero. В окне XUL я хочу добавить / удалить вкладки, такие как вкладки в браузере firefox. Основной код окна XUL приведен ниже:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://note/skin/editor.css" type="text/css"?>
<window id="MDEitor" title="Editor" orient="horizontal"
onload="Zotero.Znote.winOnLoad(event, 'mainWindowOnload');"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<vbox flex="1">
<tabbox flex='2'>
<tabs>
<tab label="This is a very long title in this tab" selected="true" crop="right" style="width: 100px"/>
</tabs>
<tabpanels>
<tabpanel orient="vertical">
<iframe src="chrome://note/content/mde.html" flex="2" onload="Zotero.note.onLoad(event, 'iframe');"/>
</tabpanel>
</tabpanels>
</tabbox>
<spacer style="height: 10px"/>
<hbox flex='1' style="height:30px">
<spacer flex="1"/>
<button id="save-button" label="Save" oncommand="Zotero.note.save();"/>
<button id="cancel-button" label="Cancel" oncommand="Zotero.note.cancel();"/>
</hbox>
</vbox>
<script src="chrome://zotero/content/include.js"/>
<script src="chrome://note/content/include.js"/>
</window>
Новая вкладка будет добавлена с этим кодом
console.log('create tab');
var tabpanel = win.document.createElement('tabpanel');
tabpanel.orient = 'vertical';
var iframe = win.document.createElement('iframe');
tabpanel.appendChild(iframe);
var tabs = win.document.getElementsByTagName('tabs')[0];
var tabpanels = win.document.getElementsByTagName('tabpanels')[0];
var title = Zotero.Utilities.trimInternal(item.getNoteTitle());
var tab = tabs.appendItem(this.cleanTitle(title));
tabpanels.appendChild(tabpanel);
tabs.selectedIndex = win.document.getElementsByTagName('tab').length -1;
var iframes = win.document.getElementsByTagName('iframe');
iframe = iframes[iframes.length -1 ];
iframe.setAttribute('src', "chrome://note/content/mde.html");
iframe.setAttribute('flex', '2');
console.log(iframe.contentWindow);
iframe.contentDocument.addEventListener("DOMContentLoaded", test(item.getID(), 'iframe load'), false);
console.log('create tab complete');
Код не работает должным образом, согласно этому ответу , содержимое iframe сначала заполняется пустым содержимым. Я не могу получить правильный контент в обработчике событий test
.
XUL сейчас устарел, но я надеюсь, что кто-то может дать мне несколько советов.