我一直在关注Google的文档以在云端硬盘上共享文件:Share Files
如果我从Google云端硬盘界面将文件上传到Google云端硬盘,然后尝试从我的Web应用程序共享此文件,则我的JavaScript控制台出现以下错误:
在chrome:
Refused to display 'https://drive.google.com/share?id=0B6UmN_AivG7SLWVYakF2Rk1CdDg&foreignServi…=postMessage&appId=958414147877&embedOrigin=http%3A%2F%2Fsandbox.velop.org' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
在Firefox中:
[14:04:41.157] Load denied by X-Frame-Options: https://drive.google.com/share?id=0B6UmN_AivG7SLWVYakF2Rk1CdDg&foreignService=explorer&shareService=explorer&shareProtocolVersion=2&command=init&subapp=10&popupWindowsEnabled=true&shareUiType=default&rand=1370585078609&theme=2&client=postMessage&appId=958414147877&embedOrigin=http%3A%2F%2Fsandbox.velop.org does not permit cross-origin framing.
现在,很奇怪的是,如果我从Web应用程序创建文件并通过api上传到云端硬盘,则可以毫无问题地共享文件。
甚至更陌生,只要从云端硬盘中打开(只要我已将网络应用安装在云端硬盘中,以便我可以使用我的网络应用打开文件),就可以打开文件,即使以后我不使用它也可以共享驱动器以打开文件了。
任何想法可能导致这种行为吗?
在我的Drive SDK控制台中,我将打开URL设置为:
http://sandbox.velop.org/my-google-drive/detail
当我使用Web应用在云端硬盘中打开文件时,云端硬盘会将我重定向到:
http://sandbox.velop.org/my-google-drive/detail?state=%7B%22ids%22:%5B%220B6UmN_AivG7SLWVYakF2Rk1CdDg%22%5D,%22action%22:%22open%22,%22userId%22:%22105908447865504163566%22%7D
(可以共享)当我在Web应用程序中打开文件时,URL类似于:
http://sandbox.velop.org/my-google-drive/0B6UmN_AivG7SLWVYakF2Rk1CdDg/detail
(仅在从驱动器打开一次后才能共享)编辑:
我意识到这是here所述的Google Drive API的标准行为:
有没有办法允许该应用打开/写入任何文件?
我以为在注册我的应用程序时使用
https://www.googleapis.com/auth/drive
范围将允许我执行此操作,但事实并非如此。 最佳答案
我遇到了完全相同的问题。
我的应用程序正在请求完整的驱动器范围(因此该应用程序应有权访问所有文件)。
但是共享仅在用户以前从驱动器打开文件的情况下才起作用。
从驱动器打开的文件似乎有一些神奇的“同时列出”功能。
访问之前未从驱动器打开的文件时...
拒绝在其框架中显示htps://drive.google.com/share?id = 0534534543iTEhYamxfUnc2MnM&foreignServi…ent = postMessage&appId = 46459361793&embedOrigin = http%3A%2F%2Fwww.editey.com',因为它设置了“X-Frame-Options”到“SAMEORIGIN”。
...这显然具有误导性,因为共享按钮不在框架中。
在新的浏览器选项卡中打开Give URL可以提示真正的根本原因:
应用程序“3453459361793”无权访问文档“0B0o5345345DAc_SiTEhYamxfUnc2MnM”。
我的应用程序应该可以访问文档,但是看起来“共享对话框”就像一个单独的应用程序一样,只允许访问以前从驱动器打开的文件。