XUL - добавить вкладку в окне XUL и обнаружить событие загрузки iframe в этой новой вкладке - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь создать простое дополнение для 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 сейчас устарел, но я надеюсь, что кто-то может дать мне несколько советов.

...