1

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

我对特权和非特权页面之间的交互感到不满,但它仅对传递字符串有用。我不认为将 10MB 从/转换为 base64 是个好主意。

  • 甚至可以将此类数据传递给扩展程序吗?
  • 如果是,那该怎么做?
  • 我不应该使用JS XPCOM 组件吗?

谢谢你的建议。

4

2 回答 2

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);

这里的概念证明。

于 2012-12-19T13:42:48.980 回答
0

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

使用 nsiWebBrowserPersist 下载文件

解压文件

于 2012-12-17T14:28:51.737 回答