2013-08-22 18 views
0

Мне нужно, чтобы две формы разделителя были доступны из меню моей таблицы. После некоторых неприятностей я нашел этот отличный ответ от Могсдада: Single Google Form for multiple SheetsЗапуск Google-формы через меню электронных таблиц

Я использовал его код для вставки формы в uiapp с помощью htmlservice. Так что мой код выглядит точно так же, как его:

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 недель назад (не могу точно сказать), но с тех пор я либо получить логин-приглашение для входа в Google-приложений, или я возвращаю ошибку сервера. Формы настроены на публикацию, поэтому не нужно входить в систему. Наконец, loggin in тоже не работает, поэтому он требует разрешить куки-файлы (которые разрешены в настройках браузера. Я думаю, что html-сервис не способен обрабатывать логин в cookie.)

Так как я могу получить сценарий снова работает? Я ничего не менял, и он по-прежнему идентичен коду в ответе от Mogsdad.

Ty для любых попыток помощи!

+0

Как только ваш скрипт содержит какие-либо методы, для которых требуется проверенная учетная запись пользователя, босс-аутентификатор будет входить и требует входа в систему. (например, MailApp, GmailApp, DriveApp ...) Я заметил, что это верно, даже если код закомментирован. Поэтому вам может потребоваться посмотреть, что еще в файле сценария. ... Я не понимаю ваши комментарии относительно файлов cookie, не могли бы вы уточнить? – Mogsdad

+0

Таким образом, форма, которую следует называть, не нуждается в какой-либо информации для входа. Это полностью публично. Проблема, которая возникла при входе в систему, заключалась в том, что во всплывающем кадре HtmlService логин не мог быть выполнен. В приложениях Google было указано, что «файлы cookie отключены в настройках браузера», которые потребуются для входа в систему. (На самом деле они включены, и моя идея заключалась в том, что проблема с Tghe заключалась бы в том, что HtmlService передаст вход для входа ... но это просто предположение). – user2671460

+0

Но моя основная проблема все еще не решена: текущая функция не открывает какую-либо форму (общедоступную) в всплывающем окне HtmlService. Это ALLWAYS дает мне ошибку сервера, о которой больше не указано. Я не знаю, где искать решение. – user2671460

ответ

1

Вы попались на изменения в HtmlService. Как было объявлено в мае 2013 года, Google меняет настройки по умолчанию для режима песочницы ECMA, используемого скриптами.

Хорошей новостью является то, что вам просто нужно указать режим изолированной песочницы, а вложение формы возобновится.

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

Thanx снова и много! U сделал мой день ... теперь он снова работает, по крайней мере, для тестовой таблицы. Я думаю, что я заставлю его снова работать в сложном рабочем процессе, в котором я нуждаюсь. Но теперь я стал хорошим шагом вперед. Наверное, мне нужно отделить части скриптов, которые используют аутентификацию из частей htmlservice. Я посмотрю ... если я не получу его, я вернусь :) Ty и у вас хороший день! – user2671460