Как на чистом JavaScript определить загружена страница напрямую в браузере по ссылке или открыта в iframe

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

Так почему бы не начать использовать обход блокировки YouTube при том что техническая возможность используя расширение nikolaevevge для браузера Mozilla Firefox уже появилась, а объем полезной(и не очень) информации на видеохостинге YouTube, по мнению некоторых диванных экспертов, меньше не стал.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

На очередном конкурсе танцев, школьница отлично выступила.

Что использовать вместо Юбуст

Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Вопрос на тему HTML и JavaScript. Есть некоторая страница сайта, в ней открывается iframe. Соответственно при открытии страницы указанной в src тега указаны необходимые заголовки чтобы iframe открылся. Предположим страница уже загрузилась. На ней можно разместить произвольный JavaScript. Задача: можно ли используя только JavaScript на загружаемой iframe странице определить что она открыта именно в iframe? Важно! JS должен быть статическим и не зависеть от генерирующего страницу скрипта(например PHP), который в том числе устанавливает необходимые HTTP заголовки разрешающие открывать iframe. То-есть задачу можно решать только через JS. Не следует полагаться на размеры iframe окна, так как они могут быть специально указаны как у окна браузера(хотя если есть вариант точно отличить - тогда можно).

Да, с помощью JavaScript на странице, загруженной в iframe, можно определить, что она открыта именно внутри iframe, а не как отдельная страница. Вот несколько способов сделать это:

1. Проверка window.self и window.top

Если страница загружена в iframe, то window.self не будет равен window.top.

JavaScript
    
if (window.self !== window.top) {
    console.log("Страница загружена в iframe");
} else {
    console.log("Страница загружена как основная");
}

  

2. Проверка window.parent

Если страница загружена в iframe, window.parent будет отличаться от window.

JavaScript
    
if (window.parent !== window.self) {
    console.log("Страница загружена в iframe");
}

  

3. Попытка доступа к window.frameElement

Если страница загружена в iframe, window.frameElement вернет сам элемент iframe, иначе — null.

JavaScript
    
if (window.frameElement) {
    console.log("Страница загружена в iframe");
}

  

4. Проверка через document.referrer (не всегда надежно)

Если страница загружена в iframe, document.referrer может содержать URL родительской страницы (но это зависит от политик браузера и CORS).

JavaScript
    
if (document.referrer && document.referrer !== "") {
    console.log("Возможно, страница загружена в iframe (но не точно)");
}

  

Самый надежный способ

Лучше всего использовать комбинацию проверок window.self !== window.top и window.frameElement:

JavaScript
    
const isInIframe = () => {
    try {
        return window.self !== window.top || !!window.frameElement;
    } catch (e) {
        return true; // Если доступ к window.top запрещен (например, из-за CORS), значит, это iframe
    }
};
      
if (isInIframe()) {
    console.log("Страница загружена в iframe");
} else {
    console.log("Страница загружена как основная");
}

  

Почему это работает?

Если страница в iframe, то window.top указывает на главное окно, а window.self — на текущий iframe.

Если доступ к window.top запрещен (например, из-за политики безопасности), то попытка сравнения выбросит исключение, что тоже говорит о том, что страница в iframe.

window.frameElement возвращает сам элемент iframe, если он есть.

Этот подход не зависит от PHP, HTTP-заголовков или размеров окна и работает чисто на стороне JavaScript.

Другие товары

Вы так же можете прочитать следующие статьи: