我正在使用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.
任何人都可以告诉我为什么这样做......现在它不是......我怎么能让它再次运作?
感谢您的协助。
答案 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})