0

xul ベースの Firefox アドオンから、次のことを行う必要があります。

  1. 非表示の iframe をプログラムで作成する (1 回)
  2. アドオンの実行時に複数の URL をロードするために再利用します
  3. 各 URL の読み込み後に返された HTML にアクセスする

問題: 'onload' または 'DOMContentLoaded' イベントをトリガーするために、作成された iframe の最初のページ読み込みしか取得できません。以降の URL では、トリガーされるイベントはありません。

注:可能であれば、hiddenDOMWindow自体を使用しても問題ありません...

コード:

var urls = ['http://en.wikipedia.org/wiki/Internet', 'http://en.wikipedia.org/wiki/IPv4', 'http://en.wikipedia.org/wiki/Multicast' ];

visitPage(urls.pop());

function visitPage(url) {

    var XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

    var hiddenWindow = Components.classes["@mozilla.org/appshell/appShellService;1"].getService
        (Components.interfaces.nsIAppShellService).hiddenDOMWindow;

    var doc = hiddenWindow.document, iframe = doc.getElementById("my-iframe");

    if (!iframe) 
    {
        iframe = doc.createElement("iframe");
        //OR: iframe = doc.createElementNS(XUL_NS,"iframe");

        iframe.setAttribute("id", "my-iframe");
        iframe.setAttribute('style', 'display: none');

        iframe.addEventListener("DOMContentLoaded", function (e) { 
            dump('DOMContentLoaded: '+e.originalTarget.location.href);
            visitPage(urls.pop()); 
        });

        doc.documentElement.appendChild(iframe);
    }

    iframe.src = url;    
}
4

1 に答える 1