javascript - 使用 Firefox 附加 SDK 进行跨域图像数据检索

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

我正在开发一个 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/

相关文章:

javascript表到数组发送到php

javascript - RTCPeerConnection 在 Firefox 和 Safari 中不是构造函数

javascript - 是否可以将 css 应用于 Canvas 标签中的文本

javascript - 跳过 $watch 初始调用

javascript - 如何在 mongodb 的嵌套子数组中使用 $filter ?

javascript - 如何使用 javascript insideHTML 更改 svg 文本标签

javascript - 我们可以通过编程方式从 Firefox 中删除保存的密码吗?

java - 从 Java 访问 Firefox 的证书信任库

javascript - 在 JavaScript 中尝试使用 localStorage 保存和加载包含对象的数组时出错

javascript - 如何重新缩放图像以使用 Canvas 绘制?