虽然这个问题已经很老了,但问题仍然存在,网上几乎没有什么可以解决的。我想出了一个我想分享的解决方案:
您可以在没有先设置属性的情况下使用图像(或视频),crossorigin
并测试是否可以通过 AJAX 向同一资源发送 HEAD 请求。如果失败,您将无法使用该资源。如果成功,您可以添加属性并重新设置图像/视频的来源,并附上时间戳,重新加载它。
此解决方法允许您向用户显示资源并在不支持 CORS 时简单地隐藏一些功能。
HTML:
<img id="testImage" src="path/to/image.png?_t=1234">
JavaScript:
var target = $("#testImage")[0];
currentSrcUrl = target.src.split("_t=").join("_t=1"); // add a leading 1 to the ts
$.ajax({
url: currentSrcUrl,
type:'HEAD',
withCredentials: true
})
.done(function() {
// things worked out, we can add the CORS attribute and reset the source
target.crossOrigin = "anonymous";
target.src = currentSrcUrl;
console.warn("Download enabled - CORS Headers present or not required");
/* show make-image-out-of-canvas-functions here */
})
.fail(function() {
console.warn("Download disabled - CORS Headers missing");
/* ... or hide make-image-out-of-canvas-functions here */
});
在 IE10+11 和当前的 Chrome 31、FF25、Safari 6(桌面)中测试和工作。在 IE10 和 FF 中,当且仅当您尝试从 https 脚本访问 http 文件时,您可能会遇到问题。我还不知道有什么解决方法。
2014 年 1 月更新:
为此所需的 CORS 标头应如下所示(Apache 配置语法):
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "referer, range, accept-encoding, x-requested-with"
仅 ajax 请求需要 x-header。据我所知,大多数浏览器都没有使用它