javascript - 使用 Google Drive SDK 共享文件

标签 javascript google-drive-api google-api-js-client

我一直在关注 Google 的文档以在云端硬盘上共享文件:Share Files

如果我从 Google 云端硬盘界面上传文件到 Google 云端硬盘,然后尝试从我的网络应用程序共享此文件,我会在我的 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'. 

在火狐中:

[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.

现在奇怪的是,如果我从我的 webapp 创建文件并通过 api 上传到云端硬盘,我就可以毫无问题地共享文件。

更奇怪的是,我从云端硬盘中打开文件一次就足够了(我已经在我的云端硬盘中安装了网络应用程序,所以我可以使用我的网络应用程序打开文件)以便能够共享它,即使以后我不再使用云端硬盘打开文件。

知道是什么导致了这种行为吗?

在我的 Drive SDK 控制台中,我将打开 URL 设置为:http://sandbox.velop.org/my-google-drive/detail

当我使用我的网络应用打开云端硬盘中的文件时,云端硬盘将我重定向到: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(可分享)

当我在我的网络应用程序中打开文件时,URL 类似于:http://sandbox.velop.org/my-google-drive/0B6UmN_AivG7SLWVYakF2Rk1CdDg/detail(只有打开才能共享从驱动器之前)

编辑:

我意识到这是 Google Drive API 的标准行为,如 here 所述:

When users approve these scopes, the app is installed for the user, with access to files that the user creates or opens with the app.

有没有办法让应用程序打开/写入任何文件?

我认为在注册我的应用程序时使用 https://www.googleapis.com/auth/drive 范围可以让我这样做,但似乎并非如此。 .

最佳答案

我遇到了完全相同的问题。

我的应用程序正在请求完整的驱动器范围(因此该应用程序应该可以访问所有文件)。 但只有当用户之前从驱动器打开文件时,共享才有效。 从驱动器打开的文件似乎有一些神奇的“while-listing”。

在我得到...之前访问尚未从驱动器打开的文件时

拒绝在框架中显示 htps://drive.google.com/share?id=0534534543iTEhYamxfUnc2MnM&foreignServi…ent=postMessage&appId=46459361793&embedOrigin=http%3A%2F%2Fwww.editey.com' 因为它设置了“X-Frame” -选项'到'SAMEORIGIN'。

...这显然具有误导性,因为共享按钮不在框架中。

在新的浏览器选项卡中打开给定的 url 可以提示真正的根本原因: 应用程序“3453459361793”无权访问文档“0B0o5345345DAc_SiTEhYamxfUnc2MnM”。

我的应用程序应该可以访问该文档,但看起来“共享对话框”就像一个单独的应用程序,只允许访问以前从驱动器打开的文件。

关于javascript - 使用 Google Drive SDK 共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16977464/

相关文章:

javascript - 在 VS Code EADDRINUSE 错误上调试 Node.JS

javascript - MongoDB : Read a file stored using GridFS from MongoDB in Javascript(using Node.JS)

android - 使用 Google Drive 备份和恢复 SQLite 数据库

javascript - 在 Google Apps 脚本中解析为 JSON 后无法调用对象的一部分

javascript - Angular Material 2 - 未在整页中渲染

javascript - 我该怎么做这个向后看

ios - 谷歌云端硬盘 iOS SDK : Display Cancel Login Button

javascript - Google Calendar API - 推送通知不起作用

javascript - 如何使用新的 google identity JS 库来处理工作表?

google-chrome - gmail api返回查询参数之外的电子邮件