Google Apps脚本中的Google云端硬盘共享对话框

时间:2016-02-15 21:42:31

标签: javascript google-apps-script google-drive-api

我正在使用Apps脚本应用程序中的Google云端硬盘共享对话框。该应用程序部署为Web应用程序,并通过doGet()方法访问。该应用程序包含一个按钮,用于使用Google云端硬盘共享对话框共享云端硬盘文件。

当doGet()请求中没有参数值时,Google云端硬盘共享对话框将按预期工作。但是,当文件ID作为参数传递给doGet()方法并单击共享按钮时,Google云端硬盘共享对话框将返回错误:来源“https://xxxxxxxx-script.googleusercontent.com”不允许应用程序ID“XXXXXXXXXX”。
我正在使用HTML服务来评估参数值并将字符串数组返回给HTML模板。我可以看到文件ID包含在驱动器共享对话框功能的请求中。为什么它会在没有参数值的情况下按预期工作,但在评估参数值时抛出Origin not allowed错误?我甚至尝试将Origin URL添加到Developer's Console中的受信任java脚本源列表中,但仍然收到相同的错误。

我正在尝试使用Google Drive UI集成将文件ID从Drive传递到我的Apps Script Web应用程序。在加载驱动器共享库之后,通过客户端javascript调用shareResult()函数。

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();
}

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

edoGet(e)中的doPost(e)参数是事件参数的对象表示,其中包含有关任何URL参数的信息。有关这些参数的更多信息,请参阅文档的URL Parameters部分。

您必须找到一种方法来获取fileId对象上的e(最有可能位于e.parameters对象中)。完成后,根据Drive API的Add the dialog script,您必须将其放入数组中,并在创建ShareClient时将其传递。