HTML - Веб-общение

Здравствуйте, будущие веб-разработчики! Сегодня мы окунемся в захватывающую тему, которая касается того, как сделать разные части ваших веб-приложений общающимися между собой. Это как научить ваши веб-страницы разговаривать! Давайте вместе исследуем мир Веб-общения.

HTML - Web Messaging

Введение в Веб-общение

Прежде чем перейти к коду, давайте поймем, что такое Веб-общение. Представьте, что у вас открыты две веб-страницы в разных вкладках вашего браузера. Обычно эти страницы не могут напрямую общаться друг с другом. Но что, если вы хотите, чтобы они делились информацией? Вот где на помощь приходит Веб-общение!

Веб-общение позволяет разным частям веб-приложения отправлять сообщения друг другу, даже если они принадлежат разным оригинам (например, разным доменам). Это как дать вашим веб-страницам собственную专线 для разговоров!

Событие Message

В основе Веб-общения лежит событие message. Это событие срабатывает, когда получено сообщение. Давайте разберем это по шагам.

Основная структура

Вот пример того, как слушать собыение "message":

<script>
window.addEventListener("message", function(event) {
console.log("Сообщение получено из " + event.origin);
console.log("Содержимое сообщения: " + event.data);
});
</script>

Давайте расшифруем это:

  1. Мы используем window.addEventListener, чтобы слушать собыение "message".
  2. Когда arrives arrives, наша функция вызывается.
  3. Функция получает объект event, который содержит информацию о сообщении.
  4. Мы выводим в консоль оригин сообщения и его содержимое.

Отправка сообщения

Теперь посмотрим, как отправить сообщение:

<script>
// Предположим, что мы хотим отправить сообщение в iframe с идентификатором 'myFrame'
var iframe = document.getElementById('myFrame');
iframe.contentWindow.postMessage("Привет из родительской страницы!", "*");
</script>

В этом примере:

  1. Мы получаем ссылку на iframe на нашей странице.
  2. Мы используем postMessage, чтобы отправить сообщение этому iframe.
  3. Первый аргумент - содержимое сообщения.
  4. Второй аргумент "*" означает, что мы разрешаем отправку сообщения в любую оригин. В реальных приложениях вам нужно будет указать exact origin exact origin для обеспечения безопасности.

Учетные соображения

Всегда помните проверять оригин входящих сообщений! Вот более безопасная версия нашего слушателя сообщений:

<script>
window.addEventListener("message", function(event) {
// Проверяем, что сообщение приходит из надежного источника
if (event.origin !== "https://надежный-сайт.com") return;

console.log("Надежное сообщение получено: " + event.data);
});
</script>

Эта дополнительная проверка обеспечивает обработку сообщений только из источников, которым мы доверяем.

Практические примеры

Давайте рассмотрим некоторые реальные сценарии, где Веб-общение особенно полезно!

Пример 1: Общение между страницей и iframe

Представьте, что у вас есть основная страница, которая загружает игру в iframe. Вы хотите, чтобы основная страница запускала игру при нажатии кнопки.

Основная страница (parent.html):

<!DOCTYPE html>
<html>
<body>
<button onclick="startGame()">Запустить игру</button>
<iframe id="gameFrame" src="game.html"></iframe>

<script>
function startGame() {
var gameFrame = document.getElementById('gameFrame');
gameFrame.contentWindow.postMessage("start", "*");
}

window.addEventListener("message", function(event) {
if (event.data === "gameOver") {
alert("Игра окончена! Ваш результат записан.");
}
});
</script>
</body>
</html>

Страница игры (game.html):

<!DOCTYPE html>
<html>
<body>
<h1>Удивительная игра</h1>
<div id="gameArea">Игра скоро начнется...</div>

<script>
window.addEventListener("message", function(event) {
if (event.data === "start") {
document.getElementById('gameArea').innerHTML = "Игра идет!";
// Имитируем конец игры через 5 секунд
setTimeout(function() {
window.parent.postMessage("gameOver", "*");
}, 5000);
}
});
</script>
</body>
</html>

В этом примере:

  1. Основная страница имеет кнопку для запуска игры.
  2. При нажатии она отправляет "start" сообщение в iframe.
  3. Страница игры слушает это сообщение и начинает игру.
  4. Когда игра заканчивается, она отправляет "gameOver" сообщение обратно в родителя.
  5. Основная страница отображает alert при получении "gameOver" сообщения.

Пример 2: Общение между окнами

Давайте представим, что у вас есть страница с корзиной покупок и страница с деталями продукта. Вы хотите добавить товары в корзину с страницы продукта.

Страница продукта (product.html):

<!DOCTYPE html>
<html>
<body>
<h1>Удивительный продукт</h1>
<button onclick="addToCart()">Добавить в корзину</button>

<script>
function addToCart() {
window.opener.postMessage({
action: "addToCart",
product: "Удивительный продукт",
price: 19.99
}, "https://магазин.example.com");
}
</script>
</body>
</html>

Страница корзины покупок (cart.html):

<!DOCTYPE html>
<html>
<body>
<h1>Ваша корзина покупок</h1>
<ul id="cartItems"></ul>

<script>
window.addEventListener("message", function(event) {
if (event.origin !== "https://магазин.example.com") return;

if (event.data.action === "addToCart") {
var cartList = document.getElementById('cartItems');
var newItem = document.createElement('li');
newItem.textContent = event.data.product + " - $" + event.data.price;
cartList.appendChild(newItem);
}
});
</script>
</body>
</html>

В этом сценарии:

  1. Страница продукта имеет кнопку "Добавить в корзину".
  2. При нажатии она отправляет сообщение в страницу корзины (предполагается, что это opener окно).
  3. Страница корзины слушает сообщения и добавляет товар в список при их получении.

Заключение

Веб-общение открывает мир возможностей для создания интерактивных и динамичных веб-приложений. Оно позволяет разным частям вашего веб-эcosystem ecosystem communicate seamlessly, enhancing user experience and functionality.

Помните, с великой силой приходит великая ответственность! Всегда проверяйте оригин сообщений и accept only those from trusted sources. Счастливого кодирования, и пусть ваши веб-страницы всегда ведут увлекательные разговоры!

Метод Описание
window.postMessage(message, targetOrigin) Отправляет сообщение в другое окно
window.addEventListener("message", function(event) { ... }) Листенит за входящими сообщениями
event.data Содержит данные, отправленные с сообщением
event.origin Указывает оригин отправителя
event.source Предоставляет ссылку на окно отправителя

Эта таблица резюмирует ключевые методы и свойства, которые мы обсуждали в нашем путешествии по Веб-общению. Держите ее под рукой, когда начнете экспериментировать с своими messaging implementations!

Credits: Image by storyset