Google Drive API,无法通过JS打开标准共享对话框(x-frame-options error)
我有一个使用Google Drive API的JavaScript应用程序。我读到这里怎么打开一个标准的共享对话框:https://developers.google.com/drive/web/manage-sharingGoogle Drive API,无法通过JS打开标准共享对话框(x-frame-options error)
<head>
...
<script type="text/javascript" src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
init = function() {
s = new gapi.drive.share.ShareClient('<MY_APP_ID>');
s.setItemIds(["<MY_FILE_ID>"]);
}
window.onload = function() {
gapi.load('drive-share', init);
}
</script>
</head>
<body>
<button onclick="s.showSettingsDialog()">Share</button>
</body>
好像我做的一切权利,当我点击我的share
按钮,对话框开始加载但不能被加载。
在控制台中我看到:
Refused to display 'https://drive.google.com/share?...' in a frame
because it set 'X-Frame-Options' to 'SAMEORIGIN'.
我GOOGLE了这个错误,我已经看到有在SO和其他网站的一些类似的问题,但他们没有帮助。我猜Google不允许自己处于非谷歌网站的框架中(导致“SAMEORIGIN”)。
我该怎么做才能在我的应用程序中打开共享对话框?
“发射的谷歌驱动器在您的应用程序共享对话框”在页面here状态:
一个启动对话必须具有相同的起源 作为应用程序注册打开URL的网页的URL。
如果你再看看说明“配置驱动器SDK” here,你可以看到“打开URL”部分读取:
有要记住两个重要的事情打开网址:
- 请确保您为Open URL提供完全限定的域名 - localhost不起作用。
- 该URL必须属于您。应用注册完成后,您需要验证您对此网址的所有权,才能创建一个 Chrome网上应用店列表。有关更多信息,请参阅网站验证。
因此您的网页,其中推出的对话框不不具有相同起源于你谷歌硬碟SDK设置应用程序注册的打开URL。因此,要解决您的问题,请更正打开网址,以便它具有正确的网址,即具有与打开网址相同来源的网址。请注意,您可以通过https://console.developers.google.com/project更改Google Drive SDK设置。
以及确保打开网址设置正确。您还需要将您的云端硬盘SDK应用ID替换为“MY_APP_ID”。您可以按照以下说明找到应用ID:
- 转到https://console.developers.google.com
- 点击你的项目
- 点击“API和身份验证”左侧
- 单击“驱动器SDK”的设置齿轮图标
- 然后可以在“Google Drive SDK”标题下找到“App ID”,例如应用程序ID:47XXXXXXXX3
我不知道网站验证,谢谢。但即使经过验证,也会出现相同的错误。打开网址设置正确。检查了这4次,试图添加并删除斜线。没有。除了标准共享对话框之外,gapi的一切工作都很好 – imkost
另外你也知道你需要用你的Drive SDK应用ID替换“
问题解决了感谢这个答案https://stackoverflow.com/a/20742994/1185123
丹人说,在他的回答:
客户端ID您可以在谷歌找到这云端控制台 - 参见上文。 Mine是一个12位数的数字,所以你的可能也是。
矿客户端ID看起来像
175564412906-ui22fsaghkvkkj09j2bprku55m8k3d0d.apps.googleusercontent.com
我在
s = new gapi.drive.share.ShareClient('<MY_APP_ID>');
用这个ID读答案后,我试图只使用我的客户端ID的前12位数字。我没有想到它会起作用,我只是绝望。但奇怪的是,它非常完美!
如果有人能解释它为什么起作用,为什么在文档中没有说到这一点 - 欢迎您回答!
我已经更新了我的答案,详细说明了在开发者控制台中可以找到APP ID的位置。我同意这个例子没有明确说明在哪里可以找到它,这是令人困惑的。我认为文档的编写者希望用户在得到这个例子的时候知道这些信息! –
谢谢你的解释!从未在标题下看过App ID。 – imkost
很高兴我能帮到你。我同意Google文档很好,但不够详细! –
如果您包含您用于尝试打开标准共享对话框的代码,它将有所帮助。 –
@新鲜,包括代码 – imkost