Я пытаюсь создать программу в Google Apps Script, которая берет данные из листа Google, обрабатывает их в график с использованием Сервис карт GAS, а затем размещает график на классических сайтах Google с помощью Служба сайтов.
Используя код примера Charts, я компилирую график:
function graphTest () {
var data = Charts.newDataTable()
.addColumn(Charts.ColumnType.STRING, 'Month')
.addColumn(Charts.ColumnType.NUMBER, 'In Store')
.addColumn(Charts.ColumnType.NUMBER, 'Online')
.addRow(['January', 10, 1])
.addRow(['February', 12, 1])
.addRow(['March', 20, 2])
.addRow(['April', 25, 3])
.addRow(['May', 30, 4])
.build();
var chart = Charts.newAreaChart()
.setDataTable(data)
.setStacked()
.setRange(0, 40)
.setTitle('Sales per Month')
.build();
var imageData = Utilities.base64Encode(chart.getAs('image/png').getBytes());
var imageUrl = "data:image/png;base64," + encodeURI(imageData);
return imageUrl;
}
Затем я помещаю график на новую страницу Google Sites, используя простой HTML-шаблон:
var pageTemplate = HtmlService.createTemplateFromFile("page template.html");
pageTemplate.image = graphTest();
var currentPage = site.createWebPage("graph", "graph", pageTemplate.evaluate().getContent())
Шаблон страницы содержит строку для изображения:
<img src = <?!=image?>>
Теоретически этот код будет работать нормально, но при просмотре вывода в Сайтах HTML-код страницы представляет собой просто загадочный код.
<img src = "javascript:void(0);">
Запуск кода в базовом компиляторе HTML работает абсолютно нормально,, так что это наводит меня на мысль, что с самой кодировкой Base64 проблем нет. Кажется, он просто несовместим со старыми сайтами Google. Действительно, непосредственно записывая HTML-код на страницу, например
<img src = "data:image/png;base64, *all the Base64 data here* ">
дает тот же javascript:void(0); как код ГАЗ.
Старые сайты Google не поддерживают кодировку изображений Base64? Есть ли альтернативный способ получить изображение графика на сайтах Google через скрипт Google Apps?
Спасибо,
Алекс
Я ожидаю, что вывод страницы будет иметь <img border='1' ....>, поскольку это то, что добавляется htmlOutput.append. Если вы не видите границы своего тега изображения, я предполагаю, что вы не видите вывод этой части кода.
@James htmlOutput, созданный в graphTest(), отделен от шаблона, который я в конечном итоге использовал на самой странице. Это остаток кода, который я скопировал и вставил со страницы службы диаграмм. Немного запутанная оплошность с моей стороны, я мог бы вернуться и удалить эти пару строк.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы ответить на мой собственный вопрос:
После долгих экспериментов я смог использовать
<embed src = "*Base64 Data*">
тег вместо тега img с успехом. Это работало как через скрипт Google Apps, так и через HTML-редактор Google Sites.
Не ответ, но вы должны использовать
encodeURIComponentдля всего, кроме полных URL-адресов.