Проверьте, всплывает ли окно или нет?
Этот вопрос не является дубликатом если окно всплывает, но похоже.
Я разрабатываю расширение, которое вводит скрипты на все веб-страницы. Мне нужно определить, всплывает ли окно или нет.
Примечание:
Я не тот, кто открывает всплывающее окно, поэтому вышеупомянутое решение не будет работать.
Ответы
Ответ 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".