2013-08-22 103 views
0

我需要两个分离形式可以从我的电子表格菜单访问。在发现了一些麻烦后,我从Mogsdad发现了这个很好的答案: Single Google Form for multiple Sheets通过电子表格菜单启动谷歌表格

我用他的代码将表单嵌入到使用htmlservice的uiapp中。所以,我的代码看起来酷似他:

function launchTecForm() { 
    var TecformID = '1_some_form_ID'; 
    var Tecform = FormApp.openById(TecformID); 
    var TecformUrl = Tecform.getPublishedUrl(); 
    var response = UrlFetchApp.fetch(TecformUrl); 
    var formHtml = response.getContentText(); 

    var htmlApp = HtmlService 
     .createHtmlOutput(formHtml) 
     .setTitle('Tec-Response') 
     .setWidth(500) 
     .setHeight(450); 

    SpreadsheetApp.getActiveSpreadsheet().show(htmlApp); 
} 

所以这段代码完美地工作,直到大约2-3个星期前(不能说完全一致),但此后我要么得到的登录,提示登录到谷歌,应用程序,或者我得到一个服务器错误。表单被设置为publick,所以不需要任何登录。最后登录也不工作,因为它然后它要求允许cookie(这是允许在浏览器设置。我猜html服务是无法处理登录到cookie。)

那么如何获得脚本重新开始工作?我没有改变任何东西,它仍然与来自Mogsdad的答案中的代码相同。

Ty for any help-attempts!

+0

只要您的脚本包含任何需要经过验证的用户帐户的方法,身份验证机器人就会进入并需要登录。 (例如MailApp,GmailApp,DriveApp ...)我注意到即使代码已被注释掉,情况也是如此。所以您可能需要查看脚本文件中的其他内容。 ...我不明白你对cookies的评论,你能否详细说明一下? – Mogsdad

+0

因此,应该调用的表单不​​需要任何登录信息。它是完全公开的。我需要登录时遇到的问题是,在HtmlService弹出框中,登录无法完成。 Google应用程序建议“在浏览器设置中禁用Cookie”,登录时需要这些。 (事实上​​,他们已启用,我的想法是,问题将是HtmlService传输登录输入...但这只是一个猜测)。 – user2671460

+0

但我的主要问题仍未解决:当前函数在HtmlService-popup中未打开任何窗体(即public)。它总是给我一个服务器错误,这是没有进一步指定。我不知道在哪里寻找解决方案。 – user2671460

回答

1

您被HtmlService中的更改所捕获。正如2013年5月宣布的,Google一直在更改脚本使用的ECMA沙箱模式的默认值。

好消息是,您只需指定NATIVE沙箱模式,并且表单嵌入将恢复运行。

var htmlApp = HtmlService 
     .createHtmlOutput(formHtml) 
     .setSandboxMode(HtmlService.SandboxMode.NATIVE) 
     .setTitle('Tec-problem') 
     .setWidth(500) 
     .setHeight(450); 
+1

Thanx再次和很多! U让我度过了一天......现在它再次运行,至少在测试电子表格中。我想我会在需要它的复杂工作流程中再次运行它。但现在我进一步向前迈进了一大步。我想我必须单独使用htmlservice部分中的身份验证脚本的部分。我会看到...如果我没有得到它,我会回来:)泰和一个美好的一天! – user2671460

相关问题