Embedded Frames
Пример на основе интеграции старого Garpun в новое META-приложение
В Garpun мы разместили код
<script type="text/javascript">
function inIframe() {
try {
return window.self !== window.top;
} catch (e) {
return true;
}
}
document.addEventListener("DOMContentLoaded", function () {
if (inIframe()) {
// Это мы использовали чтобы убрать ненужные кнопки
document.body.classList.add("garpunEmbedded");
}
document.body.classList.remove("garpunLoading");
});
//
(metaframewatcher = window.metaframewatcher || []).push({
height_classes: ['t_window', 'cover', 'stickyWrap', 'mainBox']
});
if (inIframe()) {
// Это не относится к задаче встраивания напрямую, но наверняка будет полезно для GTM для отключения виджетов поддержки и пр
window['IS_EMBED_MODE'] = true;
// Размещаем загрузки интеграционного скрипта
(function() {
var lt = document.createElement('script');
lt.type ='text/javascript';
lt.src = 'https://app.garpun.com/_b/meta-element/iframe-content-watcher.js';
var sc = document.getElementsByTagName('script')[0];
if ( sc ) sc.parentNode.insertBefore(lt, sc);
else document.documentElement.firstChild.appendChild(lt);
})();
}
</script>
На странице META размещаем такой код
<script type="meta/js" id="token" internal>
function main(env, vm, OAuthService) {
// генерируем токен авторизации
vm.accessToken = OAuthService.getAccessToken(env.userId, ['userinfo.profile']);
}
</script>
<!--
baseUrl - посадочная
accessToken - токен авторизации, доступен в amp.garpun.com так как он переведен на общую авторизацию account.garpun.com
minAbsHeightDiff - минимальное изменение высоты на которое сработает ресайз iframe. Будет зависеть от вашего случая
handleUrls - набор правил переадресации, чтобы например при клите со списка алгоритмов внутри iframe мы могли открыть алгоритм не внутри iframe, а как url меты, т.е. карточку алгоритма в meta приложении
-->
<elem id="garpunUrl" name="me-iframe" order="0"
attrs='{
"baseUrl":"https://amp.garpun.com/interface/clients/algorithms/?adHandsClientId=${env.objectId}",
"accessToken":"${pvm.data.token.vm.accessToken}",
"minAbsHeightDiff": 90,
"handleUrls": [
{"regexp": "add-algorithm\\?algorithmId=(\\d+)", "goTo": "/card?e=182&o=$1&a=${env.applicationId}"}
]
}'
></elem>