Проверяет понимание механизма postMessage и типичных ошибок безопасности и синхронизации при обмене данными между окном и iframe.
postMessage — это API браузера для безопасного обмена сообщениями между окнами, iframe и воркерами, в том числе между разными origin. Несмотря на встроенные механизмы защиты, разработчики часто допускают ошибки, которые превращают удобный инструмент в источник уязвимостей и багов.
// Родитель
const iframe = document.querySelector('iframe');
window.addEventListener('message', (e) => {
if (e.origin !== 'https://child.example.com') return;
if (e.source !== iframe.contentWindow) return;
console.log('from child:', e.data);
});
iframe.addEventListener('load', () => {
iframe.contentWindow.postMessage({ type: 'init' }, 'https://child.example.com');
});
// Внутри iframe
window.addEventListener('message', (e) => {
if (e.origin !== 'https://parent.example.com') return;
if (e.data?.type === 'init') {
e.source.postMessage({ ok: true }, e.origin);
}
});Итог: postMessage стоит применять для кросс-доменного взаимодействия окон и iframe, но только с явной проверкой origin и source, точным targetOrigin и аккуратным управлением жизненным циклом слушателей — иначе легко получить уязвимость или трудноуловимый баг.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию