从网页读取图像数据到firefox插件不安全?

从网页读取图像数据到firefox插件不安全?,firefox,canvas,plugins,Firefox,Canvas,Plugins,我现在正在firefox上做一个插件,应该很简单。但由于我不熟悉这一点,出现了一些问题: 其目的是在用户单击图像()时绑定上下文菜单上的项目。我想使用画布大量操作此图像(有些工作类似于视觉加密),并在新面板或对话框中显示结果 要将新项绑定到菜单上,请使用以下代码 cm.Item({ label: _("menu-label-encrypt"), context: cm.SelectorContext("img"), contentScriptFile: [

我现在正在firefox上做一个插件,应该很简单。但由于我不熟悉这一点,出现了一些问题:

其目的是在用户单击图像()时绑定上下文菜单上的项目。我想使用画布大量操作此图像(有些工作类似于视觉加密),并在新面板或对话框中显示结果

要将新项绑定到菜单上,请使用以下代码

cm.Item({
    label: _("menu-label-encrypt"),
    context: cm.SelectorContext("img"),
    contentScriptFile: [
        data.url('jquery.js'),
        data.url('encrypt.menu.js'),
    ],
    onMessage: function(cmd){
        var cryptWorker = imgcrypt();
        cryptWorker.key(cmd.password);
        var ret = cryptWorker.encrypt( cmd.width, cmd.height, cmd.data);
        console.log(ret.length);
    },
});
我的想法是使用contextScriptFile
encrypt.menu.js
将代码注入页面,并获取画布数据作为数组,然后使用
self.postMessage
将其发布到插件并进行处理:

self.on('click', function(node){
    var canvasID = 'cache';
    var img = $(node)[0];
    $('<canvas>', {id: canvasID}).appendTo('body').hide();

    var canvas = $('#' + canvasID)[0];
    var ctx = canvas.getContext('2d');
    ctx.canvas.width = img.width;
    ctx.canvas.height = img.height;
    ctx.drawImage(img, 0, 0, img.width, img.height);

    var data = ctx.getImageData(0, 0, img.width, img.height).data,
        dataAry = new Array(data.length);

    for(var i=0; i<data.length; i++)
        dataAry[i] = data[i];

    var command = {
        'password': 'test',
        'width': img.width,
        'height': img.height,
        'data': dataAry,
    };

    self.postMessage(command);
});
知道这可能是由于违反了某些同源策略造成的,但这是一个插件注入的内容脚本。如果没有外部服务器的帮助,是否也不可能读取图像数据,或者我是否做了一些完全错误的事情


谢谢。

我还没有找到这种方法的任何解决方案(也就是说,注入内容以从远程检索的图像获取数据)。但是mozilla的sdk中的
net/xhr
在插件方面工作得很好。或者,我在
main.js
中编写了一个XHR,并将其用作代理

在插件方面,这个
XMLHttpRequest
没有相同的域限制,可以用于检索URL给出的图像的二进制数据。通过设置
xhr.responseType='ArrayBuffer',可以以
ArrayBuffer
的形式返回检索到的数据

为插件的XHR提供的URL只是被单击的
的src。浏览器似乎正在缓存图像,使用XHR检索该图像速度非常快,不需要向服务器发出另一个请求

menu.js:14 - SecurityError: The operation is insecure.