5

我有一個使用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」)。

我該怎麼做才能在我的應用程序中打開共享對話框?

+0

如果您包含您用於嘗試打開標準共享對話框的代碼,它將有所幫助。 –

+1

@新鮮,包括代碼 – imkost

回答

4

「發射的谷歌驅動器在您的應用程序共享對話框」在頁面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:

  1. 轉到https://console.developers.google.com
  2. 點擊你的項目
  3. 點擊「API和身份驗證」左側
  4. 單擊「驅動器SDK」的設置齒輪圖標
  5. 然後可以在「Google Drive SDK」標題下找到「App ID」,例如應用程序ID:47XXXXXXXX3
+0

我不知道網站驗證,謝謝。但即使經過驗證,也會出現相同的錯誤。打開網址設置正確。檢查了這4次,試圖添加並刪除斜線。沒有。除了標準共享對話框之外,gapi的一切工作都很好 – imkost

+0

另外你也知道你需要用你的Drive SDK應用ID替換「」? –

1

問題解決了感謝這個答案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位數字。我沒有想到它會起作用,我只是絕望。但奇怪的是,它非常完美!

如果有人能解釋它爲什麼起作用,爲什麼在文檔中沒有說到這一點 - 歡迎您回答!

+0

我已經更新了我的答案,詳細說明了在開發者控制檯中可以找到APP ID的位置。我同意這個例子沒有明確說明在哪裏可以找到它,這是令人困惑的。我認爲文檔的編寫者希望用戶在得到這個例子的時候知道這些信息! –

+1

謝謝你的解釋!從未在標題下看過App ID。 – imkost

+0

很高興我能幫到你。我同意Google文檔很好,但不夠詳細! –

相關問題