2016-02-15 168 views
1

我正在使用Apps腳本應用程序中的Google雲端硬盤共享對話框。該應用程序被部署爲一個Web應用程序,並通過doGet()方法訪問。該應用程序包含一個使用Google雲端硬盤共享對話框共享雲端硬盤文件的按鈕。

當doGet()請求中缺少參數值時,Google Drive共享對話框按預期工作。但是,當將文件ID作爲參數傳遞給doGet()方法並單擊共享按鈕時,Google Drive共享對話框將返回錯誤:
原因'https://xxxxxxxx-script.googleusercontent.com'不適用於應用程序ID「XXXXXXXXXX」。
我正在使用HTML服務來評估參數值並將字符串數組返回給HTML模板。我可以看到請求中包含的文件Id包含在Drive共享對話框功能中。爲什麼它會按照預期的方式使用out參數值,但在評估參數值時拋出Origin not allowed錯誤?我甚至嘗試將Origin URL添加到開發人員控制檯中受信任的Java腳本來源列表中,但仍然收到相同的錯誤。

我正嘗試使用Google Drive用戶界面集成將文件ID從雲端硬盤傳遞到我的Apps腳本Web應用程序。加載驅動器共享庫後,shareResult()函數通過客戶端JavaScript調用。Google Apps腳本中的Google雲端硬盤共享對話框

function doGet(e){ 
    var html = HtmlService.createTemplateFromFile('htmlfile'); 
    var ids = e.parameters.ids; 
    html.folderIds = ids; 
    return html.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 
function shareResult(){ 
    var idList = folderIds.split(","); 
    s = new gapi.drive.share.ShareClient(PROJECT_ID); 
    s.setOAuthToken(oauthtoken); 
    s.setItemIds(idList); 
    s.showSettingsDialog(); 
} 

回答

0

doGet(e)doPost(e)e參數是包含有關任何URL參數的信息的事件參數的對象表示。有關參數的更多信息可以在文檔的URL Parameters部分找到。

您必須找到一種方法來獲取e對象上的fileId對象(很可能駐留在e.parameters對象中)。完成後,根據Drive API的Add the dialog script,您必須將其放入數組中並在創建ShareClient時傳遞它。

+0

我更新了我用的代碼片段來傳遞參數並觸發ShareClient對話框的問題。在調試代碼時,我可以在shareResult函數中看到來自e.parameters.ids的文件ID。 – Ken

+0

也許這些領域需要在拆分後修剪?即也許有一個空格字符前綴/後綴在一個ID使其無效。 –

1

你確定'oauthtoken'是否設置了?你應該調試它。我打賭'oauthtoken'實際上是空的或不正確的。你也不應該用PROJECT_ID實例化ShareClient。試試這個:

var idList = folderIds.split(","); 
s = new gapi.drive.share.ShareClient(); 
s.setOAuthToken(ScriptApp.getOAuthToken()); 
s.setItemIds(idList); 
s.showSettingsDialog(); 
+0

是的,我驗證了OAuth令牌有效。當我用PROJECT_ID實例化ShareClient時,對話框顯示一段時間的加載圖像,然後返回500錯誤。當我在idList中對一個文件Id進行硬編碼時,此代碼有效。唯一不起作用的是通過doGet()評估參數並將它們傳遞給客戶端js。 – Ken

相關問題