crossorigin属性的目的…?

在图像和脚本标记。

我的理解是,您可以访问其他域上的脚本和图像。 那么,什么时候使用这个属性呢?

这是否当你想限制他人访问你的脚本和图像的能力?

图片

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-crossorigin

脚本

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

启用CORS的图像可以在元素中重用,而不会受到污染。 允许的值是:

该页面已经回答你的问题。

如果你有一个交叉来源的图像,你可以把它复制到一个canvas上,但是这会“阻碍”canvas,从而阻止你阅读它(所以你不能“偷取”图像,例如,从站点本身无法访问的内部网)。 但是,通过使用CORS,存储图像的服务器可以告诉浏览器允许跨源访问,因此可以通过canvas访问图像数据。

MDN也有一个关于这个东西的网页: https : //developer.mozilla.org/en-US/docs/HTML/CORS_Enabled_Image

这是否当你想限制他人访问你的脚本和图像的能力?

没有。

答案可以在规范中find。

对于img

crossorigin属性是一个CORS设置属性 。 其目的是允许第三方网站允许跨页访问的图像与canvas一起使用。

script

crossorigin属性是一个CORS设置属性 。 它控制从其他来源获取的脚本是否暴露错误信息。

这就是我们如何成功地在script标记中使用crossorigin属性:

我们遇到的问题:我们试图使用window.onerror在服务器上loggingjs错误

几乎所有我们logging的错误都有这个信息: Script error. 而且我们正在获得有关如何解决这些js错误的很less的信息。

事实certificate,铬本机实施报告错误

 if (securityOrigin()->canRequest(targetUrl)) { message = errorMessage; line = lineNumber; sourceName = sourceURL; } else { message = "Script error."; sourceName = String(); line = 0; } 

将发送messageScript error. 如果请求的静态资产违反了浏览器的同源策略 。

在我们的情况下,我们正在为cdn提供静态资产。

我们解决这个问题的方法是将crossorigin属性添加到script标记中。

PS从这个答案得到所有的信息

如果您正在本地开发一段代码,并且正在使用Chrome,则会出现问题。 如果您的页面使用“file:// xxxx”forms的URL加载,那么尝试在canvas上使用getImageData()将会失败,并且抛出交叉源安全性错误,即使您的图像是从相同的目录在本地机器上作为呈现canvas的HTML页面。 所以如果你的HTML页面被提取,说:

文件:// d:/wwwroot/mydir/mytestpage.html

和你的JavaScript文件和图像正在从中获取,说:

文件:// d:/wwwroot/mydir/mycode.js

文件:// d:/wwwroot/mydir/myImage.png

那么尽pipe这些次要实体是从同一个来源获取的,安全错误依然被抛出。

出于某种原因,Chrome并没有正确设置原点,而是将必需实体的origin属性设置为“null”,从而无法简单地通过在浏览器中打开HTML页面并在本地进行debugging来testing涉及getImageData()的代码。

此外,出于同样的原因,将图像的crossOrigin属性设置为“匿名”也不起作用。

我仍然试图find一个解决方法,但再一次,似乎本地debugging正在渲染尽可能痛苦的浏览器实现者。

我只是尝试在Firefox中运行我的代码,并通过认识到我的图像与HTML和JS脚本来自同一起源,Firefox得到了正确的结果。 因此,我希望能够在Chrome浏览器中解决这个问题的一些提示,就像目前Firefox正常工作的情况一样,它的debugging速度非常缓慢,直到从拒绝服务攻击中脱离出来。

我已经find了如何说服谷歌浏览器允许file://引用,而不会引发交叉错误。

步骤1:在其他操作系统中创build一个快捷方式(Windows)或等同物;

第2步:将目标设置为如下所示:

“C:\ Program Files文件(x86)\ Google \ Chrome \ Application \ chrome.exe” – 允许文件从文件访问

这个特殊的命令行参数,–allow-file-access-from-files,告诉Chrome浏览器允许你使用file://引用网页,图像等,而不会每次尝试传输这些错误图像到HTMLcanvas,例如。 它适用于我的Windows 7安装程序,但是值得检查一下,看它是否能在Windows 8/10和各种Linux发行版上运行。 如果是这样,问题就解决了 – 离线开发照常恢复。

现在,我可以从file:// URI引用图像和JSON数据,如果我尝试将图像数据传输到canvas,或者将JSON数据传输到表单元素,则Chrome不会抛出跨源错误。