iframe-встраивание

PlayCanvas предоставляет мощные возможности для создания 3D-графики в браузере, но что, если нужно встроить 3D-приложение в другую веб-страницу? Для этих целей можно использовать стандартный HTML элемент <iframe>, который позволяет встраивать внешние ресурсы и приложения в другие страницы. Встраивание PlayCanvas-приложений в iframe — это удобный способ интеграции 3D-контента в сайты или веб-приложения. Рассмотрим, как это можно сделать.

Подготовка PlayCanvas-приложения

Прежде чем приступить к встраиванию приложения PlayCanvas, необходимо убедиться, что оно опубликовано и доступно по URL. Для этого можно использовать два основных способа: размещение проекта на сервере PlayCanvas или его экспорт в локальные файлы.

  1. Проект на сервере PlayCanvas: После того как проект создан, его можно опубликовать с помощью функций самой платформы PlayCanvas. Процесс публикации очень прост и позволяет получить ссылку, которую можно вставить в тег iframe.

  2. Экспорт проекта: Также возможен экспорт проекта в виде HTML-файлов и размещение их на собственном сервере. В этом случае URL, на который будет ссылаться iframe, будет относительным, например, http://example.com/playcanvas/index.html.

Встраивание в HTML с использованием iframe

Для встраивания проекта PlayCanvas в страницу используется элемент <iframe>. Простейший код для встраивания приложения будет выглядеть следующим образом:

<iframe src="https://your-playcanvas-project-url.com" width="800" height="600" frameborder="0"></iframe>

Здесь:

  • src — это URL вашего проекта на PlayCanvas или на другом сервере.
  • width и height — размеры iframe в пикселях.
  • frameborder — устанавливает, будет ли отображаться рамка вокруг iframe (в данном случае она отключена).

Управление размерами и стилями

Использование iframe предполагает наличие определённых ограничений в отношении доступных параметров. Тем не менее, можно настроить размеры iframe через CSS для адаптивности. Это может быть полезно для корректного отображения проекта на различных устройствах и экранах.

<style>
  iframe {
    width: 100%;
    height: 100vh;
    border: none;
  }
</style>
<iframe src="https://your-playcanvas-project-url.com"></iframe>

В этом примере iframe будет растягиваться по ширине и высоте на весь экран браузера. Подобная адаптивность полезна для мобильных устройств и современных веб-приложений.

Взаимодействие с контентом внутри iframe

Для более сложных взаимодействий между основным сайтом и встраиваемым приложением PlayCanvas можно использовать JavaScript и механизмы взаимодействия между окнами, такие как postMessage. Этот метод позволяет безопасно обмениваться данными между главным окном и iframe. Рассмотрим пример.

Отправка данных из основного окна в iframe

Чтобы отправить данные в iframe, можно использовать следующий код:

const iframe = document.getElementById('myIframe');
iframe.contentWindow.postMessage('Hello from parent', '*');

Получение данных внутри iframe

В самом приложении PlayCanvas нужно прослушивать событие message, чтобы получить данные, отправленные из основного окна:

window.addEventListener('message', function(event) {
    if (event.origin !== 'https://your-website.com') return; // проверка безопасности
    console.log('Received message: ' + event.data);
});

Этот механизм позволяет безопасно обмениваться данными между PlayCanvas-приложением и внешней веб-страницей, например, для отправки команд или получения информации о состоянии сцены.

Проблемы с производительностью

Встраивание PlayCanvas в iframe может вызвать некоторые проблемы с производительностью, особенно если приложение использует сложную графику или требует значительных вычислительных ресурсов. Это связано с тем, что браузеры могут ограничивать производительность контента в iframe, особенно если он находится в фоновом режиме.

Чтобы минимизировать эти проблемы, можно:

  • Использовать настройки производительности PlayCanvas, такие как оптимизация текстур и объектов.
  • Убедиться, что iframe работает в том же домене, что и основное приложение, чтобы избежать ограничений по безопасности.
  • Настроить requestAnimationFrame для обновления содержимого только при необходимости, чтобы избежать излишней нагрузки на систему.

Использование API PlayCanvas с внешнего сайта

Чтобы получить доступ к функционалу PlayCanvas-приложения из внешнего сайта, можно создать специальное API, которое будет доступно через iframe. Для этого в PlayCanvas-приложении нужно использовать методы, которые могут быть вызваны через postMessage или другие механизмы взаимодействия.

Пример взаимодействия через API может выглядеть следующим образом:

  1. В PlayCanvas-приложении создаём специальную функцию для обработки запросов:
window.addEventListener('message', function(event) {
    if (event.origin !== 'https://your-website.com') return;
    if (event.data === 'startAnimation') {
        startAnimation();
    }
});
  1. На внешнем сайте отправляем команду:
const iframe = document.getElementById('playcanvasIframe');
iframe.contentWindow.postMessage('startAnimation', 'https://your-playcanvas-url.com');

Это позволит управлять поведением PlayCanvas-приложения напрямую из основного веб-сайта, что открывает большие возможности для интеграции 3D-контента в более сложные веб-приложения.

Заключение

Встраивание PlayCanvas-приложений в iframe открывает множество возможностей для интеграции 3D-контента в веб-страницы. Этот подход является простым и удобным, однако важно учитывать особенности взаимодействия между страницей и iframe, а также производительные ограничения, которые могут возникнуть при использовании сложных 3D-ресурсов. Правильная настройка взаимодействия с внешними сайтами через JavaScript и управление размерами iframe позволяют создать гибкие и эффективные решения для веб-разработчиков.