Google云端硬盘网站上的Access-Control-Allow-Origin错误

时间:2013-12-04 00:43:39

标签: jquery google-drive-api

我正在使用Google云端硬盘(https://googledrive.com/host/..。)为自助服务终端托管一个非常简单的网站。在这个网站上,我使用jQuery load()函数来嵌入Google Drive文档中的一些内容(https://docs.google.com/document/..。)。这一直很好......直到我今天刚检查过它。

该网站不再显示文档中的内容,现在在控制台中抛出错误:

XMLHttpRequest cannot load https://docs.google.com/document/d/1X1ZEtrGm8tnAvLIuzF4ch2dltVjIwQJl3Zn3bOLJS4s/pub. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://googledrive.com' is therefore not allowed access.

任何人都可以告诉我为什么这样做......现在它不是......我怎么能让它再次运作?

感谢您的协助。

2 个答案:

答案 0 :(得分:2)

Google似乎最近更改(或删除了)Access-Control-Allow-Origin文件标题。我曾经通过JS Google Drive SDK获取文档的元信息,然后使用提供的导出链接和访问令牌通过jQuery获取HTML内容。这不再适用了。

我最终在我的应用程序中实现了一个Web代理,我将传递导出链接和访问令牌。

在Rails中(使用HTTParty gem),控制器操作如下所示:

def get_google_doc
  response = HTTParty.get(
      params[:export_link],
      { headers: { 'Authorization' => 'Bearer ' + params[:access_token] } }
  )
  render(text: response.parsed_response)
end

JS请求是这样的:

var request = jQuery.ajax({
    "url": "/get_google_doc",
    "type": "GET",
    "dataType": "html",
    "data": {
        "export_link": htmlExportLink,
        "access_token": accessToken
    }
});

您可以在此处找到有关此主题的更多信息:

答案 1 :(得分:0)

@dsager提供了非常好的回复,我相信,在很多情况下,他的回答将是遇到此问题的许多人的最佳解决方案。

如果有人使用Flask / Python并且不想打扰后端代码,那么这里是@dsager为Flask / Python采用的后端解决方案(注意它使用requests模块):

import requests

@app.route('/get_google_doc', methods=['POST'])
def get_google_item():
  if (not request.json or not 'export_link' in request.json or not 'access_token' in request.json):
    abort(400)

  headers = { 'Authorization' : 'Bearer %s' % request.json['access_token'] }
  r = requests.get(request.json['export_link'], headers=headers)

  return jsonify({'status': 200, 'success': True, 'content': r.content})