【发布时间】:2015-07-19 14:26:14
【问题描述】:
我想问你如何使用插件向网页内容公开功能。 我已经安装了 jpm 工具(node.js 上的新 cfm)来制作包。
所以我必须使用 Cu.exportFunction,它可以工作,但是当添加内容时,unsafeWindow、window 或任何作为上下文 jpm 运行抛出错误未定义。 完整消息:ReferenceError:未定义 unsafeWindow 很抱歉这个基本问题,但是有三种方法可以制作插件,几个类,sdk 和非常可怕的文档数量,其中大部分已被弃用或无法正常工作。
我想从网站保存文件访问权限,无需用户交互。
目标 Firefox 是 38+,平台窗口,仅在本地使用。我不太关心安全问题,是我自己的电脑,我的脚本和脚本会被我的同事在本地使用。
一段时间以来,我一直在使用 enablePrivileged 代码,而不是解决方法、zipjs、php 本地服务器等。 来自 mdn 的工人解决方案对我不起作用(只是类似的错误,如果它会起作用,我宁愿使用没有开销的东西)。
来自 Mozillas github 的代码不起作用(很多错误)。
我一步一步在做什么? 安装了node.js(两天前的最新版本),安装了jpm(也是两天前)。 jpm 初始化 然后复制粘贴的 sn -p 保存画布和导出功能。 jpm 运行。 这就是一切。两天来,我试图让它工作,用谷歌搜索答案,搜索 MDN 和 SO。 什么都没有。
它应该如何工作? 我根据给定的偏好和数据在画布上生成了 200 多个图(代码无关紧要),然后我希望所有画布都保存在目录中。我为每个画布命名,文件类型为 png。 当画布生成时,我想执行 saveCanvas snipet,给它命名并走得更远。
PHP、zip 或其他解决方法会产生超过 2GB 的 RAM 开销和几分钟的处理时间。有时它会耗尽内存。
我不想让 XUL 扩展来交互、添加 flash 或其他技术。 只需使用插件保存画布。
我只是在寻找如何使这个 sn-p 工作的解决方案。
提前致谢。
//https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Canvas
function saveCanvas(canvas, path, type, options) {
return Task.spawn(function *() {
var reader = new FileReader;
var blob = yield new Promise(accept => canvas.toBlob(accept, type, options));
reader.readAsArrayBuffer(blob);
yield new Promise(accept => { reader.onloadend = accept });
return yield OS.File.writeAtomic(path, new Uint8Array(reader.result), { tmpPath: path + '.tmp' });
});
}
let { Cu } = require('chrome');
Cu.exportFunction(saveCanvas, unsafeWindow, {defineAs: "saveCanvas"});
也许有更好的方法来应用它?
【问题讨论】:
-
简单,使用
Cu.exportFunction:) developer.mozilla.org/en-US/docs/… btw 太棒了! -
我正在使用这部分,给定的上下文不起作用 - unsafeWindow 未定义。这些代码也来自 MDN,不是我的。
-
这里使用了exportFunction 看看:github.com/IntelLabs/RiverTrail/blob/master/extension/lib/…
标签: javascript save firefox-addon