xul ベースの Firefox アドオンから、次のことを行う必要があります。
- 非表示の iframe をプログラムで作成する (1 回)
- アドオンの実行時に複数の URL をロードするために再利用します
- 各 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;
}