系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网页制作 > 心得技巧 > 详细页面

跨域图片资源权限(CORS enabled image)

时间:2019-12-08来源:系统城作者:电脑系统城

HTML 规范文档为 images 引入了 crossorigin 属性, 通过设置适当的头信息 CORS , 可以从其他站点加载 img 图片, 并用在 canvas 中,就像从当前站点(current origin)直接下载的一样.

crossorigin 属性的使用细节, 请参考CORS settings attributes.

什么是 “被污染的(tainted)” canvas?

尽管没有CORS授权也可以在 canvas 中使用图像, 但这样做就会污染(taints)画布。 只要 canvas 被污染, 就不能再从画布中提取数据, 也就是说不能再调用 toBlob(), toDataURL() 和 getImageData() 等方法, 否则会抛出安全错误(security error).

这实际上是为了保护用户的个人信息,避免未经许可就从远程web站点加载用户的图像信息,造成隐私泄漏。

(译者注: 如果用户登陆过QQ等社交网站, 假若不做保护 ,则可能打开某个网站后,该网站利用 canvas 将用户的图片信息获取,上传,进而引发泄露.)

示例: 从其他站点保存图片

首先, 图片服务器必须设置相应的 Access-Control-Allow-Origin 响应头。添加 img 元素的 crossOrigin 属性来请求头。比如Apache服务器,可以拷贝HTML5 Boilerplate Apache server configs 中的配置信息, 来进行回应:


 
  1. <IfModule mod_setenvif.c>
  2. <IfModule mod_headers.c>
  3. <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
  4. SetEnvIf Origin ":" IS_CORS
  5. Header set Access-Control-Allow-Origin "*" env=IS_CORS
  6. </FilesMatch>
  7. </IfModule>
  8. </IfModule>

这些设置生效之后, 就可以像本站的资源一样, 保存其他站点的图片到 DOM存储 之中(或者其他地方)。


 
  1. var img = new Image,
  2. canvas = document.createElement("canvas"),
  3. ctx = canvas.getContext("2d"),
  4. src = "http://example.com/image"; // 具体的图片地址
  5.  
  6. img.crossOrigin = "Anonymous";
  7.  
  8. img.onload = function() {
  9. canvas.width = img.width;
  10. canvas.height = img.height;
  11. ctx.drawImage( img, 0, 0 );
  12. localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
  13. }
  14. img.src = src;
  15. // 确保缓存的图片也触发 load 事件
  16. if ( img.complete || img.complete === undefined ) {
  17. img.src ="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
  18. img.src = src;
  19. }
  20.  

浏览器兼容性

Desktop

 

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 13 8 No support No support ?

 

Mobile

 

Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? ? ? ? ?

 

另请参见

Chrome:在WebGL中使用跨域图片

HTML规范-crossorigin属性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载