在最近的导航器中刚刚加载的选项卡的解决方案:浏览器和 iframe 已经加载
Components.utils.import('resource://gre/modules/Services.jsm')
var aDOMWindow = Services.wm.getMostRecentWindow('navigator:browser');
var iframes = aDOMWindow.gBrowser.contentDocument.querySelectorAll('iframe');
Services.appShell.hiddenDOMWindow.console.log('number of iframes in this tab = ' + iframes.length);
[].forEach.call(iframes, function (frm, i) {
var iframeInnerHtml = frm.contentDocument.documentElement.innerHTML;
});
function logIframeHtml(iframe, i) {
iframe.removeEventListener('DOMContentLoaded', logIframeHtml, true); //this line removes the event listneer if it had one
var iframeDoc = iframe.contentDocument;
if (!iframeDoc) {
Services.appShell.hiddenDOMWindow.console.log('iframe ' + i + ' is not fully loaded yet as it its contentDocument does not exist');
iframe.addEventListener('DOMContentLoaded', logIframeHtml, true);
} else {
var iframeInnerHtml = iframeDoc.documentElement.innerHTML;
Services.appShell.hiddenDOMWindow.console.log('iframe ' + i + ' innerHTML = ' + iframeInnerHtml);
}
}
此解决方案适用于当前选项卡,但不信任 iframe 是否已加载:
Components.utils.import('resource://gre/modules/Services.jsm')
var aDOMWindow = Services.wm.getMostRecentWindow('navigator:browser');
var iframes = aDOMWindow.gBrowser.contentDocument.querySelectorAll('iframe');
Services.appShell.hiddenDOMWindow.console.log('number of iframes in this tab = ' + iframes.length);
[].forEach.call(iframes, function (frm, i) {
logIframeHtml(frm, i);
});
function logIframeHtml(iframe, i) {
iframe.removeEventListener('DOMContentLoaded', logIframeHtml, true); //this line removes the event listneer if it had one
var iframeDoc = iframe.contentDocument;
if (!iframeDoc) {
Services.appShell.hiddenDOMWindow.console.log('iframe ' + i + ' is not fully loaded yet as it its contentDocument does not exist');
iframe.addEventListener('DOMContentLoaded', logIframeHtml, true);
} else {
var iframeInnerHtml = iframeDoc.documentElement.innerHTML;
Services.appShell.hiddenDOMWindow.console.log('iframe ' + i + ' innerHTML = ' + iframeInnerHtml);
}
}