Я создал приведенный ниже код 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&cht=d&chdp=sites&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&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.