我正在开发一个 Firefox 插件,它涉及从网络上的任意图像读取像素图像数据。
对于 Chrome、Safari 和 Opera,这就像在后台页面的 Canvas 上加载图像一样简单(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请求类型为 Blob 并使用 createObjectURL 加载图像的 API。但这似乎有点不必要地令人费解,当我觉得应该有某种方法来调用 getImageData 而不会在特权上下文中违反同源策略时。
最佳答案
您需要的是特权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;
现在您可以不受安全限制地工作。
关于javascript - 使用 Firefox 附加 SDK 进行跨域图像数据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528321/