Подтвердить что ты не робот

Проверьте, всплывает ли окно или нет?

Этот вопрос не является дубликатом если окно всплывает, но похоже.

Я разрабатываю расширение, которое вводит скрипты на все веб-страницы. Мне нужно определить, всплывает ли окно или нет.

Примечание: Я не тот, кто открывает всплывающее окно, поэтому вышеупомянутое решение не будет работать.

4b9b3361

Ответ 1

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

if (window.opener && window.opener !== window) {
  // you are in a popup
}

Ответ 2

Следующие действия работали для меня при тестировании в Chrome, Firefox, Safari и IE8. Он работал для создания окна с использованием window.open() или target = _blank.

if (window.opener) {
    alert('inside a pop-up window or target=_blank window');
} else if (window.top !== window.self) {
    alert('inside an iframe');
} else {
    alert('this is a top level window');
}

Ответ 3

window.locationbar.visible необязательно только для всплывающего окна, но может помочь определить, может ли пользователь вручную изменить местоположение вручную через строку местоположения...

Ответ 4

Следующий оператор будет прав, если окно является всплывающим окном или подкадром:

 window.parent != window

Ответ 5

Почему бы просто не проверить, не является ли открыватель НЕ неопределенным? у всплывающего окна есть открывашка, а у обычной страницы - нет.

if (window.opener != null) 

Ответ 6

Это не верный метод пожара, но, как правило, всплывающее окно с использованием window.open() не направляет новый URL-адрес, поэтому оба окна будут иметь один и тот же href. Поэтому во многих случаях:

window.location.href == window.opener.location.href

будет верным для всплывающего окна. Таким образом, вы можете сделать:

var isPopup = (window.location.href == window.opener.location.href);

Как я уже сказал, это работает в моих ограниченных тестах, поэтому может быть какая-то обратная связь, которая показывает, где это не будет надежным.

Ответ 7

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

Другими словами, если вам удастся изменить размер окна, вы, вероятно, внутри всплывающего окна.

удачи.

Ответ 8

Для меня я реализовал экран Logout, который можно было бы отображать в всплывающем окне через window.open(..) или по ссылке на одной странице.

Мне нужно было определить:

1), если мой экран выхода находится в пределах всплывающего окна, затем:

event.preventDefault();
window.close();

2), в противном случае используйте функцию обратного просмотра браузера.

window.history.back();

Мое решение: Если страница находится во всплывающем окне, в моем случае она имеет историю оконных страниц 1:

event.preventDefault();
if (window.history.length === 1) {
    window.close();
} else {
    window.history.back();
}

Ответ 9

Я реализовывал кнопку "Закрыть" для экрана всплывающего окна и кнопку "Отмена" для окна "_self" в "Typescript/Nodejs" и считаю, что это будет работать и для JavaScript. Поэтому мне нужно было определить, открывается ли экран во всплывающем окне.

if(window.opener || window.history.length === 1) 
     isPopupWindow = true;
else 
   isPopupWindow = false;

"window.opener" работает практически во всех браузерах, но имеет проблемы с IE, поэтому для решения проблемы с IE я использовал "window.history.length".