Можно ли как-нибудь общаться с iframe кроме postMessage

«Можно ли как-нибудь общаться с iframe кроме postMessage» — вопрос из категории Безопасность, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, есть несколько способов взаимодействия с iframe помимо postMessage:

  1. Доступ к DOM iframe (если iframe с того же домена):
const iframeDoc = document.getElementById('myIframe').contentDocument;
iframeDoc.getElementById('element').style.color = 'red';
  1. Общие переменные (если iframe с того же домена):
// Родительская страница
window.sharedVar = 'Hello';
// В iframe
console.log(parent.sharedVar);
  1. URL параметры (простой способ передачи данных при загрузке):
<iframe src="page.html?param=value"></iframe>
  1. LocalStorage/SessionStorage (если домены совпадают):
// Родитель
localStorage.setItem('key', 'value');
// iframe
console.log(localStorage.getItem('key'));

postMessage остается самым безопасным и кросс-доменным способом взаимодействия. Другие методы работают только при соблюдении политики одинакового происхождения (Same-Origin Policy).