Здравствуйте.
Берут сомнения меня, что CAJA, даже в режиме IFRAME, предоставляет нам DOM-документ. Все же, с большой вероятностью, это некий фарш LIKE_DOM = CAJA(DOM);
Поэтому инструкция, чтобы в нее не передавали, не будет "responsive":
document.getElementByTagName('img').src = data.image;
Но, это же DOM, в конце концов! Создаем элемент, вместо изменения атрибута:
index.html
<div>
<input type="button" onclick="showImage()" value="Click Me!" />
<div id="app"></div>
</div>
<script>
function showImage() {
google.script.run.withSuccessHandler(doStuff).withFailureHandler(function serverFailureHandler(e) {
console.log(JSON.stringify(e))
}).getImageId();
};
function doStuff(id) {
var img = document.createElement('img');
img.src = 'https://drive.google.com/uc?export=download&id=' + id;
document.getElementById('app').appendChild(img);
};
</script>
Code.gs
function doGet(e){
return HtmlService.createHtmlOutputFromFile('index');
}
function getImageId(){
return '0BzStSAirQJ2oREZGYnM5MjBUZTQ';
}
Заметьте, нет никакой необходимости вызывать DriveApp. Он вам понадобится, только если изображение будет не в общем доступе. Тогда вам придется брать Blob, кодировать его в base64 и передавать слепок. Размер слепка не может превышать 10Мб.
И еще я заметил у вас
<?!= include('JavaScript'); ?>
Не забудьте, что шаблоны не исполняют асинхронного кода
Load data asynchronously, not in templates, поэтому, создавая нечто объемное, постарайтесь выдать HTML как можно быстрее:
function doGet(e){
return HtmlService.createHtmlOutputFromFile('index');
}