使用Firefox附加SDK进行跨域ImageData检索

时间:2014-05-07 20:59:01

标签: javascript firefox canvas firefox-addon firefox-addon-sdk

我正在开发一个Firefox插件,它涉及从网络上的任意图像中读取像素图像数据。

使用Chrome,Safari和Opera,这就像在背景页面中的画布上加载图像一样简单(getImageData可以工作并忽略同源限制)。但是在Firefox上,使用附加SDK,创建"trusted" page-worker并在从任意URL加载的图像上调用getImageData会产生安全性错误。

- message = The operation is insecure.
- name = SecurityError
- result = 2152923154

我一直在浏览Add-on SDK的文档和其他StackOverflow答案,看起来内容脚本通常仍然受同源策略的约束。 PrivilegeManager / enablePrivilege(我甚至不确定这是否相关)似乎已被弃用。

我目前唯一想到的方法是低级net / xhr XMLHttpRequest API,其requestType为Blob,并使用createObjectURL加载图像。但这似乎有点不必要的复杂,当我觉得应该有一些方法来调用getImageData而不会碰到特权上下文中的同源策略。

2 个答案:

答案 0 :(得分:3)

您需要的是一个特权canvas,我认为没有办法从内容脚本中获取一个,不管是否受信任。

尽管如此,我们还没有选择。

var chromewin = require('sdk/windows/utils').getHiddenWindow();
var canvas = chromewin.document.createElementNS('http://www.w3.org/1999/xhtml',
                                                'canvas');
var img = new chromewin.Image;

现在您可以在没有安全限制的情况下工作。

答案 1 :(得分:0)

尝试var blah = new Image然后执行blah.onload = function() { canvas.data...... }然后执行blah.src = '....'