将二进制数据从网页传递到Firefox扩展

时间:2012-12-17 13:46:29

标签: javascript firefox-addon

我正在尝试将大型二进制数据(例如,新的Uint8Array(10000000))从网页的JavaScript(JS)传递到扩展的JS。我想通过nsIBinaryOutputStream / nsIFile(我无法从我的页面调用)将这些数据从扩展名保存到文件中。 [ATM我不知道如何从本地机器上的页面JS保存(大/二进制)数据的任何其他方法。]

我对Interaction between privileged and non-privileged pages感兴趣,但它只对传递字符串很有用。我不认为从/向base64转换10MB是个好主意。

  • 是否可以将此类数据传递给分机?
  • 如果是,那该怎么做呢?
  • 我不应该使用JS XPCOM component吗?

感谢您的建议。

2 个答案:

答案 0 :(得分:1)

好的,我已经解决了如何将任何对象从网页传递到扩展程序。

在网页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.

答案 1 :(得分:0)

如果您有文件中的数据,则可以使用nsIWebBrowserPersist并将数据直接下载到文件中。这个文件可以压缩,也可以解压缩。您可以在这些页面上找到许多信息(带示例):

download file using nsiWebBrowserPersist

unzip file