在图像和脚本标签中。
我的理解是您可以访问其他域上的脚本和图像。那么什么时候使用这个属性呢?
这是您想限制其他人访问您的脚本和图像的能力吗?
图片:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-crossorigin
脚本:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
在图像和脚本标签中。
我的理解是您可以访问其他域上的脚本和图像。那么什么时候使用这个属性呢?
这是您想限制其他人访问您的脚本和图像的能力吗?
图片:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-crossorigin
脚本:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
这就是我们在标签中成功使用crossorigin
属性的方式:script
我们遇到的问题:我们试图在服务器中记录 js 错误,使用window.onerror
我们记录的几乎所有错误都有这条消息:Script error.
我们得到的关于如何解决这些 js 错误的信息非常少。
原来chrome中的原生实现报错
if (securityOrigin()->canRequest(targetUrl)) {
message = errorMessage;
line = lineNumber;
sourceName = sourceURL;
} else {
message = "Script error.";
sourceName = String();
line = 0;
}
将message
像Script error.
请求的静态资源违反浏览器的同源策略一样发送。
在我们的例子中,我们从 CDN 提供静态资产。
我们解决它的方法是将crossorigin
属性添加到script
标签中。
PS从这个答案中得到了所有信息
启用 CORS 的图像可以在元素中重复使用而不会被污染。允许的值为:
该页面已经回答了您的问题。
如果您有跨域图像,则可以将其复制到画布中,但这会“污染”画布,从而阻止您阅读它(因此您不能“窃取”图像,例如从站点本身无法访问的 Intranet )。但是,通过使用 CORS,存储图像的服务器可以告诉浏览器允许跨域访问,因此您可以通过画布访问图像数据。
MDN 也有一个关于这件事的页面:https ://developer.mozilla.org/en-US/docs/HTML/CORS_Enabled_Image
这是您想限制其他人访问您的脚本和图像的能力吗?
不。
如果您正在本地开发一段快速代码,并且您使用的是 Chrome,那么就会出现问题。如果您的页面使用“file://xxxx”形式的 URL 加载,则尝试在画布上使用 getImageData() 将失败,并引发跨域安全错误,即使您的图像是从相同的本地计算机上的目录作为呈现画布的 HTML 页面。因此,如果您的 HTML 页面是从中获取的,请说:
file://D:/wwwroot/mydir/mytestpage.html
并且正在从中获取您的 Javascript 文件和图像,例如:
file://D:/wwwroot/mydir/mycode.js
file://D:/wwwroot/mydir/myImage.png
那么尽管这些辅助实体是从同一来源获取的,但仍然会引发安全错误。
由于某种原因,Chrome 没有正确设置原点,而是将必需实体的原点属性设置为“null”,从而无法仅通过在浏览器中打开 HTML 页面并在本地调试来测试涉及 getImageData() 的代码。
此外,出于同样的原因,将图像的 crossOrigin 属性设置为“匿名”也不起作用。
我仍在尝试为此找到解决方法,但是再一次,浏览器实现者似乎使本地调试变得尽可能痛苦。
我刚刚尝试在 Firefox 中运行我的代码,并且 Firefox 通过识别我的图像与 HTML 和 JS 脚本来自相同的来源而做对了。所以我欢迎一些关于如何在 Chrome 中解决问题的提示,因为目前,虽然 Firefox 可以工作,但它的调试器速度非常慢,以至于从拒绝服务攻击中移除了一步。
我发现了如何说服 Google Chrome 允许 file:// 引用而不会引发跨域错误。
第 1 步:创建快捷方式 (Windows) 或其他操作系统中的等效项;
第 2 步:将目标设置为如下所示:
"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files
那个特殊的命令行参数 --allow-file-access-from-files 告诉 Chrome 让你使用 file:// 对网页、图像等的引用,而不会在你每次尝试传输这些文件时抛出跨域错误例如,图像到 HTML 画布。它适用于我的 Windows 7 设置,但值得检查它是否也适用于 Windows 8/10 和各种 Linux 发行版。如果是这样,问题就解决了——离线开发恢复正常。
现在我可以从 file:// URI 引用图像和 JSON 数据,如果我尝试将图像数据传输到画布或将 JSON 数据传输到表单元素,Chrome 不会抛出跨域错误。