Формы Google, встроенные в листы Google, не кликаются - конфликт CORS - PullRequest
0 голосов
/ 12 марта 2019

Я создал электронную таблицу, в которую я отображаю Google Forms, используя песочницу в режиме iframe. Однако формы Google не реагируют на клики при нажатии на встроенный фрейм. Похоже, что-то связано с CORS, потому что, если я включу свой плагин-подавитель CORS, он станет кликабельным. Однако я не хочу устанавливать плагин CORS на каждый компьютер, на котором я устанавливаю эту функцию. Как решить эту проблему для всех, кто обращается к электронной таблице?

function panel(){
  
  var form = FormApp.openById('formId');
  var formUrl = form.getPublishedUrl();
  
  var response = UrlFetchApp.fetch(formUrl);
  var formHtml = response.getContentText();
  
  var htmlApp = HtmlService
      .createHtmlOutput(formHtml)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME)
      .setTitle('Form')
      .setWidth(600) 
      .setHeight(800);

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

Всякий раз, когда я нажимаю "Далее", я получаю следующие сообщения на моей консоли в браузере Google Chrome.

Доступ к XMLHttpRequest по адресу https://www.gstatic.com//freebird//js/k=freebird.v.en.lcU4npEiYUw.O/rt=j/d=0/rs=AMjVe6hdoeb-_UmrKEHSn6K-MdbidWgqhw/m=syu,syv,syt,syw,syx,syy,syz,syj,sy10,sy1q,sy2n,sy31,KFVhZe' из источника 'https://n -tnjo46dbraljse3yd32xl22ypwhdx36fhlaiora-0lu-script.googleusercontent.com ' был заблокирован политикой CORS: нет 'Access-Control- Заголовок Allow-Origin 'присутствует в запрашиваемом ресурсе.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Проблема:

  • Вы загружаете html и пытаетесь использовать его в своем собственном iframe. Это будет считаться мошенничеством между сайтами, и браузер не допустит его из-за CORS.

Решение:

  • Google-формы позволяют встраивать себя.

Сценарий:

function panel(){

  var form = FormApp.openById('formId');
  var formUrl = form.getPublishedUrl(); // Should end in `/viewform`; If not, modify it accordingly.

//  var response = UrlFetchApp.fetch(formUrl);
//  var formHtml = response.getContentText();

  var htmlApp = HtmlService
      .createHtmlOutput('<h1>MY FORM</h1>')
      .append('<iframe src ="' + formUrl + '?embedded=true" width="700" height="520" frameborder="0" marginheight="0" marginwidth="0">Loading...</iframe>')
      .setTitle('Form')
      .setWidth(750) 
      .setHeight(800);

  SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}
0 голосов
/ 12 марта 2019

Возможно, вы могли бы попытаться открыть форму, исследовать (F12) и скопировать сгенерированный HTML-код в новый файл HTML из вашего скрипта, а затем использовать его с HtmlService.createHtmlOutputFromFile (вместо комбинации FormApp и UrlFetchApp)Таким образом, вы будете лучше контролировать HTML, но вам придется копировать каждое изменение в форме в ваш HTML-файл в сценарии ...

...