我正在开发一个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而不会碰到特权上下文中的同源策略。
答案 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 = '....'