我想问你如何使用插件将功能暴露给网页内容。 我已经安装了jpm工具(node.js上的新cfm)来打包。Firefox插件将铬功能暴露给网站
所以我必须使用Cu.exportFunction,它可以工作,但是当添加内容,unsafeWindow,窗口或任何上下文时,jpm run throw error undefined。 完整信息:ReferenceError:unsafeWindow未定义 对不起基本问题,但有三种方法可以创建插件,几个类,sdk和真正可怕的文档量,其中大多数不推荐使用或不使用。
我想保存从网站的文件访问,没有用户交互。
目标Firefox是38+,平台窗口,只用于本地。我并不关心安全问题,它是我自己的电脑,我的脚本和脚本将由我的同事在本地使用。
一段时间以来,我一直在使用enablePrivileged代码,比变通办法,zipjs,php本地服务器等。 mdn的工作人员解决方案对我不起作用(简单地类似的错误,如果它能工作,我宁愿使用没有开销的东西)。
来自Mozillas github的代码不起作用(很多错误)。
我在做什么一步一步来? 安装了node.js(两天前的最新版本),安装了jpm(也是两天前)。 jpm init 然后复制粘贴的代码片段来保存画布和导出功能。 jpm运行。 这就是一切。两天来,我试图让它工作,搜索答案,搜索MDN和SO。 什么都没有。
它应该如何工作? 根据给定的偏好和数据,我在画布上生成了200多个图(代码无关紧要),然后我希望将所有画布保存在目录中。我给每个画布命名,filetype是png。 当canvas生成时,我想执行saveCanvas snipet,给它命名并继续。
变通方法如PHP,zip或其他方式会导致超过2GB的内存开销和几分钟的处理时间。有时它会消失。
我不想让XUL扩展来交互,添加闪存或其他技术。 只需使用插件保存画布。
我只看解决方案如何使这个片段的工作。
在此先感谢。
//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' :) https://developer.mozilla.org/en-US/docs/Components.utils.exportFunction真棒工作btw! – Noitidart
我正在使用这部分,上下文给定不工作 - unsafeWindow是未定义的。这些代码也来自MDN,不是我的。 – Evil
exportFunction在这里使用检查出来:https://github.com/IntelLabs/RiverTrail/blob/master/extension/lib/main.js#L47 – Noitidart