Функция GAS doGet не срабатывает при встраивании страницы при встраивании в новую страницу (http смешанный контент)

Я создал приведенный ниже код GAS для внутренней сети Google Сайтов моей компании. Он извлекает время и пользователя, вошедшего в систему, и публикует страницу, которую они просмотрели, чтобы мы могли подтвердить, что наши сотрудники используют инструменты интрасети, и какая информация наиболее ценна для них. Когда мы добавляем новый контент в интранет, я дублирую этот сценарий и встраиваю его в новую страницу сайтов Google, используя приглашение Вставить >> Сценарий Google Apps. И да, я гарантирую, что сервисы Admin SDK и Google Sheets включены. Я даже могу запустить функцию doGet из среды Apps-Script, и все работает как часы.

По непонятной мне причине этот скрипт не работает при встраивании в новые страницы. Я пробовал следующие шаги:

1) Подтвердите, что скрипт в настоящее время работает на странице [успешно]

2) Создайте новую страницу объявлений Google.

3) Вставьте точный сценарий из шага 1 в новую страницу Google.

4) Обновите новую страницу и проверьте, заполнил ли скрипт лист журнала [FAILED]

Вот мой код ниже:

/*
This Script Needs the following Advanced Services to function:

  Admin Directory
  
  This Script Could be used with the following library, but is not required:

  BetterLog: MYB7yzedMbnJaMKECt6Sm7FLDhaBgl_dE

  
*/ 

//PropertiesService.getScriptProperties().setProperties({'LogSheet':'1hw3f5ywdbF6JuRd1lPzrCthNaMb5InHl9VBP-xxxxxx', 'ErrSheet': '1_PHc1EU0JYLJirMceAP_enktaP3HJmGHS407Oxxxxx'});

try{
//-------------------------------------------------
  
var ACTIVE = true;
 
  
var PAGE = 'Name of the Page to Track';
var TYPE = 'Article';
var GROUP = 'Department Name';
var URL = 'https://sites.google.com/a/Intranet/URL for the Article';
//--------------------------------------------------  

if(ACTIVE){ 
var errorTemplate = 'Analytics_Error_Log_started_';
var logTemplate = 'Analytics_Log_started_'
var now = new Date();
var date = Utilities.formatDate(now, 'CST', 'MM/dd/YYYY');
var time = Utilities.formatDate(now, 'CST', 'hh:mm:ss a');
var user = AdminDirectory.Users.get(Session.getActiveUser().getEmail());
var scriptStore = PropertiesService.getScriptProperties().getProperties();
var errorFolder = '0B6w6hIuCv6BtdHl1S09kbxxxx';
var logFolder = '0B6w6hIuCv6BtWldmYjdEbxxxxx';
var logSheet = getSheet('LogSheet', logTemplate, logFolder);
var errSheet = getSheet('ErrSheet', errorTemplate, errorFolder);
var scriptStore = PropertiesService.getScriptProperties().getProperties();
var errSheet = SpreadsheetApp.openById(scriptStore.ErrSheet).getSheets()[0];
var logSheet = SpreadsheetApp.openById(scriptStore.LogSheet).getSheets()[0];
   }
 }
catch(e){Logger.log('Compiler Error in File TK-'+PAGE+': '+e);}
  
function doGet(){
     
     try{if(ACTIVE){
              logSheet.appendRow([date, time, user.name.givenName, user.name.familyName, PAGE, TYPE, GROUP, user.primaryEmail, URL]);
     }}
  
     catch(e) {report(e);}
}

function report(e){
Logger.log(date+' '+time+' '+user.primaryEmail+' at '+PAGE+' : '+e);
errSheet.appendRow([date, time, user.primaryEmail, PAGE, e]);

  
}

function getSheet(scriptStoreVal,template, folderId){
  var sheetId = scriptStore[scriptStoreVal];
  try{var book = SpreadsheetApp.openById(sheetId);}
  catch(e){var sheetId = generateSheet(template+date, folderId);}
  
  var book = SpreadsheetApp.openById(sheetId);
  var sheets = book.getSheets();  
  var sheet = sheets[0];
  
  if(sheet.getLastRow() >= 50000){
    var fileList = DriveApp.getFolderById(folderId).getFiles();
    var found = false;
    while(fileList.hasNext())
    { 
      var testFile = fileList.next().getId();
      if (SpreadsheetApp.openById(testFile).getSheets()[0].getLastRow() < 50000)
      { 
        var book = SpreadsheetApp.openById(testFile)
        var sheet = book.getSheets()[0];
        var sheetId = testFile;
        var found = true;}
    }
    
    if(!found)
    {
      var sheetId = generateSheet(template+date, folderId);
      var book = SpreadsheetApp.openById(sheetId);
      var sheets = book.getSheets();
      var sheet = sheets[0];
    }
    
    for (var s = 1; s < book.getNumSheets(); s++)
    {
      book.deleteSheet(sheets[s]);
    }
  }
  if(book.getName().indexOf('Er') > -1)
     {
       try{sheet.deleteColumns(4,22); sheet.appendRow(['Error Message: Press Ctrl Down to scroll to end. 50K Max'])}
      catch(e){/*Sheet does not have 26 columns. We are set*/}
    }
  else
     {
       try{sheet.deleteColumns(8, 17); sheet.appendRow(['Date', 'Time', 'First Name', 'Last Name', 'Page', 'Type', 'Group','Email', 'URL']);}
       catch(e){/*Sheet does not have 26 columns. We are set*/}
    }
  
     var patch = {}; patch[scriptStoreVal] = sheetId;
     PropertiesService.getScriptProperties().setProperties(patch);
  
  return sheet;
}


function generateSheet(sheetName, folderId)
{
  var origId = SpreadsheetApp.create(sheetName).getId();
  var file = DriveApp.getFileById(origId);
  var start = file.getParents().next();
  DriveApp.getFolderById(folderId).addFile(file);
  start.removeFile(file);
  return origId;
}

Может ли кто-нибудь помочь мне понять, почему эта функция, которая все еще работает на моих предыдущих страницах, не работает на моих новых страницах?

Спасибо, Натаниэль

ОБНОВЛЕНИЕ: по предложению noogui я открыл консоль отладки Chrome и заметил, что страница помечает вставку скрипта приложения как смешанный запрос через http. Вот HTML страницы на данный момент:

<div>


<div></div>
<br>
</div>
<div></div>
<div></div>
<div><img src="https://www.google.com/chart?chc=sites&amp;cht=d&amp;chdp=sites&amp;chl=%5B%5BGoogle+Apps+Script'%3D20'f%5Cv'a%5C%3D0'10'%3D499'0'dim'%5Cbox1'b%5CF6F6F6'fC%5CF6F6F6'eC%5C0'sk'%5C%5B%22Apps+Script+Gadget%22'%5D'a%5CV%5C%3D12'f%5C%5DV%5Cta%5C%3D10'%3D0'%3D500'%3D297'dim'%5C%3D10'%3D13'%3D500'%3D297'vdim'%5Cbox1'b%5Cva%5CF6F6F6'fC%5CC8C8C8'eC%5C'a%5C%5Do%5CLauto'f%5C&amp;sig=zdJ4UDJFmGvXXHTFJf3RLHWWKks" data-props="align:left;showBorder:false;showBorderTitle:false;borderTitle:Apps Script Gadget;height:200" id="388247003045773" data-type="maestro" class="sites-placeholder-maestro" data-origsrc="https://script.google.com/a/intranet/macros/s/AKfycbxIpjE0HKKYBWpB16fB3D7BPeLtP-Y-FXLnWk3l-w853qSloes/exec" width="500" height="300" style="display: block; text-align: left;"></div>
<br>

Как видите, ссылка на заполнитель изображения И на сам скрипт осуществляется через HTTPS, так что же дает? Я не понимаю, почему он помечает смешанную ошибку http.


person Nathaniel MacIver    schedule 20.11.2017    source источник
comment
Что говорит ваш журнал ошибок?   -  person noogui    schedule 21.11.2017
comment
В консоли разработчика Chrome: смешанный контент: страница 'sites.google.com/a/ intranet/test/test3» был загружен через HTTPS, но запросил небезопасный ресурс «sites.google.com/a/intranet/sites/system/errors/'. Этот запрос был заблокирован; контент должен передаваться через HTTPS. Обратите внимание, что это не отображается, когда я запускаю ЖЕ Скрипт на странице, на которой я впервые использовал его, и это работает нормально. Я думаю, что прикрепляю его правильно, поэтому я не понимаю, почему он не работает сейчас.   -  person Nathaniel MacIver    schedule 22.11.2017


Ответы (1)


Я не уверен, что это полезно, но для внутренней сети наших сайтов Google мы используем Google Analytics. Он позаботится обо всем, и теперь у него даже есть ИИ для помощи в анализе данных. В разделе «Управление настройками сайта» есть место для вставки ключа аналитики. Это абсолютно бесплатно и динамично, поэтому любые новые страницы/статьи, которые вы добавляете, автоматически отслеживаются.

введите здесь описание изображения

person Jason Allshorn    schedule 27.11.2017
comment
Спасибо, Supertopoz, но мы используем это не для анализа посещений публичных сайтов, а для записи отдельных сотрудников, когда они посещают страницу. Google Analytics не допускает такой уровень детализации из соображений конфиденциальности, поэтому мы не можем его использовать. - person Nathaniel MacIver; 30.11.2017