首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >图像/画布中的IE10和跨源资源共享(CORS)问题

图像/画布中的IE10和跨源资源共享(CORS)问题
EN

Stack Overflow用户
提问于 2013-06-06 07:36:57
回答 2查看 27.6K关注 0票数 25

我当时的印象是Internet 10完全支持CORS,但现在我不确定了。

我们有一个JS/HTML5 5应用程序,它使用多个域,并读取图像数据。我们正在从另一个域中加载JS中的图像,imageDraw()将图像加载到画布上,然后在画布上使用getImageData。(我们不使用跨域XMLHttpRequests)。为此,我们必须在为映像提供服务的服务器上设置响应头:

代码语言:javascript
运行
复制
access-control-allow-origin: *
access-control-allow-credentials: true

并在加载之前将其设置在JS中的图像对象上:

image.crossOrigin = 'Anonymous'; //Also tried lowercase

--这对于所有新浏览器都很好,除了IE10 之外,当我们试图读取数据时,IE10会引发安全错误。

代码语言:javascript
运行
复制
SCRIPT5022: SecurityError

,IE10是否还需要做更多的工作来将这些跨域图像不受污染?

更新:

我注意到了这个答案之前的一个问题。Interestingly 这个JSFiddle 也不适用于IE10 --有人能确认这在他们的IE10?中不起作用吗?

EN

回答 2

Stack Overflow用户

发布于 2013-11-01 20:02:58

不幸的是,即使正确设置了CORS头,IE10仍然是唯一不支持画布图像CORS的流行浏览器。但可以通过XMLHttpRequest找到解决办法:

代码语言:javascript
运行
复制
var xhr = new XMLHttpRequest();
xhr.onload = function () {
    var url = URL.createObjectURL(this.response), img = new Image();
    img.onload = function () {
        // here you can use img for drawing to canvas and handling
        // ...
        // don't forget to free memory up when you're done (you can do this as soon as image is drawn to canvas)
        URL.revokeObjectURL(url);
    };
    img.src = url;
};
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.send();
票数 25
EN

Stack Overflow用户

发布于 2013-06-09 17:58:32

确认: IE10不支持HTML5画布中的CORS图像。

编辑

对不起,我以前没有处理过CORS图像,我认为这个问题是关于AJAX请求的。

根据Mozilla开发人员网络,您需要将image.crossOrigin设置为anonymoususe-credentials。另外,根据今天的页面,IE、Safari或Opera不支持这些属性。这个测试被用来证明IE9不支持它,而且似乎在IE10中同样的测试仍然失败,所以即使Safari和Opera在文章编写后增加了支持,IE10仍然很可能仍然缺乏支持。

我能给您的唯一提示是,一般来说,允许凭据是带有通配符允许原产地的不相容。删除“允许-凭据”或在“允许来源”中回显“请求源”。

下面是AJAX调用,而不是图像或视频画布资源。

早期版本的IE10已知有AJAX错误,

  • http://bugs.idsl.pl/ie/xhr.htm
  • http://connect.microsoft.com/IE/feedback/details/771552/i-e-10-and-the-post-method

所以可能是另一个浏览器漏洞。再说一次,CORS很难做到这一点。我推荐以下步骤来调试CORS问题。

  1. 将浏览器指向http://test-cors.appspot.com/#technical以获得兼容性报告。如果任何事情都失败了,那么您就会在浏览器中出现bug或缺乏对CORS的支持。
  2. 如果一切都通过,请使用测试发送的CORS头作为起点,以使CORS请求正常工作。然后一次更改一个标头,然后重新测试,直到您得到应用程序所需的标题,或者遇到您无法解释或处理的失败。
  3. 如果有必要的话,发布一个关于一个打破CORS请求的微小变化的问题,在“之前”和“失败”之后同时发布“工作”信息。如果您可以包含一个可运行的示例,这总是有帮助的。

用于CORS测试客户端和服务器( Google的Python)的完整代码可在https://github.com/rapportive-oss/cors-test上使用,以帮助您入门。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16956295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档