我正在尝试使用cors从谷歌联系人api访问数据。
我可以在auth 2.0操场上做到这一点,但当我尝试从我的应用程序中做到这一点时,它会在Google chrome的控制台中给出以下错误消息。
405方法不允许在请求的资源上没有'Access-Control-Allow-Origin'标头。
下面是我的代码: <button id="authorize-button" style="visibility: hidden">Authorize</button>
<script type="text/javascript">
var clientId = 'xxxxxxxx';
var apiKey = 'xxxxxxxxx';
var scopes = 'https://www.google.com/m8/feeds';
//var scopes = 'https://www.googleapis.com/auth/calendar';
function handleClientLoad()
{
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth,1);
}
function checkAuth()
{
gapi.auth.authorize({client_id: clientId,
scope: scopes, immediate: true}, handleAuthResult);
}
function handleAuthResult(authResult)
{
var authorizeButton = document.getElementById('authorize-button');
console.log(authResult);
if (authResult && !authResult.error)
{
authorizeButton.style.visibility = 'hidden';
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.google.com/m8/feeds/contacts/default/full");
var oauthToken = gapi.auth.getToken();
xhr.setRequestHeader('Authorization', 'Bearer ' + oauthToken.access_token);
xhr.send();
}
else
{
authorizeButton.style.visibility = '';
authorizeButton.onclick = handleAuthClick;
}
}
function handleAuthClick(event)
{
gapi.auth.authorize({client_id: clientId,
scope: scopes, immediate: false}, handleAuthResult);
return false;
}
</script>
<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
据我所知,我已经完成了在Google文档中记录的使用javascript进行cors请求的操作。
这些代码来自"如何使用CORS访问Google api"页面:
{
var xhr = new XMLHttpRequest();
var oauthToken = gapi.auth.getToken();
xhr.open('GET','https://www.googleapis.com/plus/v1/people/me/activities/public');
xhr.setRequestHeader('Authorization','Bearer ' + oauthToken.access_token);
xhr.send();
}
还没有足够的分数来评论,因此我发布了一个答案。
问题似乎是Google服务器不能正确处理CORS,您只能使用JSONP来检索信息,参见这个类似的问题和答案。简而言之,域共享联系人API仅对JSONP get正确处理access-control-allow-origin
。