如何在未经身份验证的情况下通过XHR(CORS)访问公共Google云端硬盘文件?

时间:2013-08-13 15:01:39

标签: javascript xmlhttprequest google-drive-api cors

我需要一个HTML页面才能在Javascript中使用XMLHttpRequest(XHR)访问Google云端硬盘文件而无需身份验证(因此我的用户无需登录或拥有Google帐户)。这些文件具有“任何有链接”的权限。由于这些文件是为世界开放的(有链接),我不明白为什么允许它们进行跨源资源共享(CORS)会出现问题。

downloadUrl需要身份验证,所以我猜这不是一个可行的选择。我还看了webViewLink,我想这些文件要求“在网上公开” - 在搜索引擎中出现等等,我想。这对我来说也不是一个可行的选择。我需要这些文件的“任何有链接”权限。最有希望的链接是webContentLink,根据http://googleappsdeveloper.blogspot.se/2012/08/5-things-you-didnt-know-you-could-do.html允许公开和未经身份验证的访问。

我对webContentLink的问题是它似乎不是CORS友好的。我在Chrome中使用XHR的尝试失败了(非常默默)。我没有添加任何标题。

curl使用--header "Origin: http://www.hello.se"以及有--header "Access-Control-Request-Method: GET"和不HTTP/1.1 302 Moved Temporarily的尝试都会导致Access-Control-Allow-Origin重定向到短暂的内容网址。问题是重定向响应没有webContentLink标头的迹象,这是启用CORS所必需的。

我能做些什么来让它发挥作用吗?

否则Google SDK团队,您能否使{{1}} CORS对公共文件(不需要cookie身份验证)友好,请?

2 个答案:

答案 0 :(得分:1)

JSONP似乎是从客户端动态获取Google工作表的唯一方法:

1)在Google云端硬盘中,在网络上发布文档&将共享选项设置为公共

2)使用JSON类型链接以JSON格式导出数据,它看起来像:“http://spreadsheets.google.com/feeds/list/YOUR_FILE_ID/od6/public/values?alt=json&callback=myCallback”。您需要附加& callback = myCallback才能使用JSONP。您可以使用jQuery进行JSONP调用。

3)定义一个window.myCallback JS函数来使用数据

答案 1 :(得分:0)

您可以尝试使用JS Google API客户端。它通过下载代理iframe绕过CORS限制。