質問は非常に古いものですが、問題は残っており、Web 上で解決できるものはほとんどありません。共有したい解決策を思いつきました:
最初に属性を設定せずに画像 (またはビデオ) を使用し、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"
x-header は ajax リクエストにのみ必要です。私が知る限り、ほとんどのブラウザで使用されているわけではありません