2014-03-01 126 views
0

例如,我有在Firefox的開放以下頁面:如何從Firefox插件獲取iframe的內容顯示頁面?

<html> 
    <head></head> 
    <body> text 
     <iframe id="wikipedia" src="http://en.wikipedia.org"></iframe> 
    </body> 
</html> 

如何從我的插件來獲得在iframe顯示維基百科的文字?

... 
Welcome to Wikipedia, 
the free encyclopedia that anyone can edit. 
4,462,480 articles in English 
... 

+0

我不知道爲什麼人們失望投你這一點。生病給你下面的解決方案 – Noitidart

+0

我不在乎投票 - 很需要解決。 –

回答

0

這裏的代碼將打開最近的導航新標籤:瀏覽器窗口,並在負荷會尋找I幀,並得到其內容/

這解決方案更好,因爲如果iframe加載,我測試以查看iframe是否存在iframe.contentDocument是否存在,這不是測試這個最準確的方法,我現在不能想到另一個。 如果任何人讀取此請您分享一個更好的方法,看看是否iframe中加載與否

但如果iframe要加載它會等待iframe來加載比將記錄到瀏覽器控制檯iframe的HTML

拷貝粘貼便籤,確保environement設置爲「瀏覽器」,這是測試和工作

Components.utils.import('resource://gre/modules/Services.jsm') 
var aDOMWindow = Services.wm.getMostRecentWindow('navigator:browser'); 
var newTabBrowser = aDOMWindow.gBrowser.getBrowserForTab(aDOMWindow.gBrowser.loadOneTab('http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_tolocaletimestring', { 
    inBackground: false 
})); 
newTabBrowser.addEventListener('load', function onloadFunc() { 
    Services.appShell.hiddenDOMWindow.console.log('tab loaded'); 
    newTabBrowser.removeEventListener('load', arguments.callee, true); 
    var doc = newTabBrowser.contentDocument; 
    var win = doc.defaultView; 
    var iframes = doc.querySelectorAll('iframe'); 
    Services.appShell.hiddenDOMWindow.console.log('number of iframes in this tab = ' + iframes.length); 
    [].forEach.call(iframes, function (frm, i) { 
     logIframeHtml(frm, i); 
    }); 

}, true); 

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); 
    } 
} 
+0

iframe完全加載頁面。在瀏覽器中,我可以看到它。我所需要的 - 獲取我在瀏覽器中看到的文本。 我是開發附加組件的新手。但我會盡力瞭解你的解決方案。儘管如此,如果可能需要高性能打開新標籤頁並重新加載iframe也許它很慢 據我瞭解 - 只要閱讀iframe的內容是不可能的,甚至從附加組件? –

+0

啊好吧,只是目前打開的選項卡?生病發布解決方案 – Noitidart

0

在最近的導航只是當前加載的標籤解決方案:瀏覽器和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); 
    } 
} 
+0

下面做了這個工作的人嗎? – Noitidart

+0

我曾經使用Firefox插件生成器,但現在這個服務不再。 所以我必須處理如何從零寫入插件。 之前我插入腳本main.js 現在我不知道在哪裏把你的解決方案。 如果你可以發送完成的版本,這將是很好的。 我的郵件是: [email protected] 理想情況下需要一個按鈕。當它被按下時,所有iframe的內容放在剪貼板上。 我明白,要求不可能。但是,如果你非常善良發送 - 這將是美好的。 –

+0

這是完成版本的人。你想要一個完整的插件。將你的插件上傳到github或其他東西,並告訴我你希望我把病痛放在哪裏,很樂意把它放在那裏。 – Noitidart