Прямо сейчас у меня есть код, который получает параметры текущего URL:
function doGet(e) {
var page = e.parameter.page || 'Recruit_Create';
var urlGSID = e.parameter.gsid || 'null';
var urlSheet = e.parameter.sheet || 'null';
var html = HtmlService.createTemplateFromFile(page);
html.urlGSID = urlGSID;
html.urlSheet = urlSheet;
return html.evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
Проблема в том, что мой код размещен на другом сайте внутри iframe. Этот текущий код получает URL-адрес GAS (script.google.com/...?page=...), а не URL-адрес сайта, на котором размещен iframe (example.com/...?page=...). Как я могу вместо этого получить параметры URL хоста iframe?



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


Чтобы поговорить с родительской страницей, вам необходимо использовать API PostMessage.
Приложение GAS размещается на два iframe глубиной, что делает связь с iframe немного более сложной, поскольку ни главная страница, ни приложение GAS не видят друг друга.
Чтобы преодолеть эту проблему, вам нужно сначала добавить в приложение GAS следующее:
top.postMessage('gasFrame', '*')
Затем на своей странице вам нужно прослушать это сообщение и ответить.
window.addEventListener(
"message",
(event) => {
if (event.data === "gasFrame") {
event.source.postMessage(location.href, ‘*’)
}
},
false
)
Наконец, вашему приложению GAS необходимо прослушать этот ответ.
let e
window.addEventListener(
"message",
(event) => {
e = doGet(event)
},
false
)