JavaScript window.opener — вікно, що відкрило поточне


Властивість opener посилається на вікно, яке відкрило поточне — через window.open() або посилання з target="_blank".

автор: NagarD

Загальний опис

Це та властивість, навколо якої свого часу вибухнув скандал безпеки. Сторінка, відкрита через target="_blank", отримувала посилання на твою — і могла підмінити її адресу: opener.location = 'фішинговий-сайт'. Користувач повертався на вкладку й бачив підроблену форму входу, впевнений, що це той самий сайт.

Сьогодні браузери за замовчуванням додають noopener до target="_blank", і opener там дорівнює null. Але для window.open() це треба вказувати явно.

Легальне застосування в нього одне: спливаюче вікно OAuth, яке після входу повідомляє батьківську сторінку через postMessage() і закривається.

автор: NagarD

Нотатка

Відкриваєш чуже посилання через window.open()завжди передавай 'noopener'. Інакше чужа сторінка зможе переписати адресу твоєї.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
opener 1+ 1+ 1+ 3+ 12+ 5+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
opener yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Спливаюче вікно входу, що повідомляє батька й закривається.

// --- батьківська сторінка ---
const popup = window.open('/oauth/google', 'oauth', 'width=500,height=600');

window.addEventListener('message', event => {
    if (event.origin !== location.origin) {
        return;
    }

    if (event.data.type === 'oauth-done') {
        location.reload();
    }
});

// --- усередині спливаючого вікна ---
if (window.opener) {
    window.opener.postMessage({ type: 'oauth-done' }, location.origin);
    window.close();
}

// чуже посилання — ЗАВЖДИ з noopener
window.open('https://example.com', '_blank', 'noopener');
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід