やりたいこと
デバッグ等で、S3にアップロードされているかどうかをチェックした後に、
URLを差し替えて画像を表示したいというニッチなニーズに遭遇。
普通に何も考えずに実装すると
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
という感じに怒られる。
ちゃんとヘッダを設定して、クロスドメインを有効にしましょうという話。
S3のCORS設定
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
AjaxでcrossDomainを有効にする
_.each($('.s3-image-debugger'), function(img, _idx) {
var $img = $(img);
var src = $img.attr('src');
if (src && src.match(/s3-ap-northeast-1.amazonaws.com/)) {
$.get(src, {crossDomain: true}).fail(function() {
$img.attr('src', src.replace('production', 'test'));
});
}
});
かなり急いで作ったので雑ですが、意図した挙動になりました