2012-12-17 75 views
1

我試圖從網頁的JavaScript(JS)傳遞大的二進制數據(例如新的Uint8Array(10000000))到擴展的JS。我希望通過nsIBinaryOutputStream/nsIFile(我無法從我的頁面調用)將這些數據從擴展名保存到文件中。 [自動櫃員機我不知道任何其他方法如何從頁面的JS在本地計算機上保存(大/二進制)數據。]將二進制數據從網頁傳遞到Firefox擴展

我已經紅了一個Interaction between privileged and non-privileged pages,但它僅用於傳遞字符串。我不認爲從10MB轉換到base64是個好主意。

  • 是否有可能將這些數據傳遞給擴展?
  • 如果是的話,該怎麼做呢?
  • 不應該使用JS XPCOM component

謝謝你的建議。

+0

你所關心的訪問來自鉻或您的類型數組的安全隱患在問如何保存它? – paa

+0

@paa我在問如何將數組從頁面的JS傳遞給擴展的JS(如你所說,「chrome」)以便在擴展中進一步處理(在這種情況下將它們保存到文件中)。 – pospec4444

回答

1

OK,我已經解決了如何從網頁通過任何對象擴展。

在網頁中的JavaScript(JS):

var element = document.createElement("foo"); 
document.documentElement.appendChild(element); 
var event = document.createEvent("CustomEvent"); 
event.initCustomEvent("bar", true, false, anyObject); 
element.dispatchEvent(event); 

在擴展JS:

document.addEventListener("bar", function(e) { 
    // use e.detail here 
}, false, true); 

Proof of concept here.

0

如果您有文件中的數據,您可以使用nsIWebBrowserPersist並將數據直接下載到文件中。該文件可以壓縮,並可以解壓縮。很多信息的(舉例),你可以找到這些網頁:

download file using nsiWebBrowserPersist

unzip file

+0

_如果您有file_ 中的數據,我不會。其實我需要將數據保存到文件:)數據存儲在頁面範圍JS變量(該typeof是一些數組,例如Uint8Array),我想將它們傳遞給擴展範圍JS。 無論如何,謝謝你的回答。 – pospec4444

+0

所以我認爲唯一的解決方案是使用base64進行轉換併發送到擴展程序或將它們分成部分並在小更新(添加例如1000個項目後)後立即發送或發送它們。 –

相關問題