Google JavaScript API を使用して Web アプリケーションで Google の連絡先を取得していますが、その写真を取得したいと考えています。
私はこのようなことをしています(非常に単純化されています):
var token; // let's admit this is available already
function getPhotoUrl(entry, cb) {
var link = entry.link.filter(function(link) {
return link.type.indexOf("image") === 0;
}).shift();
if (!link)
return cb(null);
var request = new XMLHttpRequest();
request.open("GET", link.href + "?v=3.0&access_token=" + token, true);
request.responseType = "blob";
request.onload = cb;
request.send();
}
function onContactsLoad(responseText) {
var data = JSON.parse(responseText);
(data.feed.entry || []).forEach(function(entry) {
getPhotoUrl(e, function(a, b, c) {
console.log("pic", a, b, c);
});
});
}
しかし、Chrome と Firefox の両方でこのエラーが発生します。
クロスオリジン リクエストがブロックされました: 同一オリジン ポリシーにより、https://www.google.com/m8/feeds/photos/media/ <user_email >/<some_contact_id>?v=3.0&access_token=<obfuscated>のリモート リソースの読み取りが禁止されています. これは、リソースを同じドメインに移動するか、CORS を有効にすることで修正できます。
フィード/写真エンドポイントからの応答ヘッダーを見ると、Access-Control-Allow-Origin: *
送信されていないことがわかり、CORS エラーが発生します。
Access-Control-Allow-Origin: *
はエンドポイントに到達したときに送信されるfeeds/contacts
ため、クロスドメイン リクエストが許可されることに注意してください。
これはバグですか、それとも彼らのドキュメントから何かを見逃していましたか?