Закрыть дочернее окно из родительского onblur, используя Javascript
У меня есть код, который возвращает другую страницу (Google) во всплывающем (дочернем) окне. Я не могу написать какой-либо код в дочернем окне, и поэтому я должен делать все от родителя. Я пытаюсь привязать событие onblur от родителя к дочернему окну, чтобы дочернее окно было закрыто после потери фокуса. Однако дочернее окно всплывает на микросекунду и закрывается автоматически.
Я не могу использовать jQuery в среде, где я работаю.
Вот мой пример кода:
<html>
<head>
</head>
<body>
<input type="button" value="Open Google" onclick="OpenWindow()" />
<script type="text/javascript">
function OpenWindow()
{
var url="http://www.google.com";
var newWin=window.open(url, 'Popup','height=500,width=600,left=100,top=100,resizable=yes,scrollbars=no,toolbar=no,status=no');
newWin.focus();
newWin.onblur = newWin.close();
}
</script>
</body>
</html>
3 ответа
Просто пропустите скобки позади .close()
newWin.onblur = newWin.close;
Вы хотите передать ссылку на функцию, вы не хотите присваивать значение, которое возвращается при выполнении .close()
,
Другой ответ может быть следующим:
function open_popup() {
var my_window = window.open("", 'targetWindow', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=750px,height=500px');
var html = '';
html = "Muhammad Shoaib Qureshi's New Window Text";
my_window.document.write(html);
my_window.focus();
my_window.onblur = function() {
my_window.close();
};
}
Никакое решение не работало для меня кроме этого выше одного.
С уважением, Shoaib.
Вышеупомянутые решения больше не будут работать с доменами с перекрестным происхождением и могут вызвать эту ошибку.Blocked a frame with origin "https://example.com" from accessing a cross-origin frame.
Чтобы обойти это, мы можем добавить прослушиватель событий в родительское окно и прослушивать focus
событие, это должно быть запущено после того, как пользователь вернется в главное окно из порожденного дочернего окна, затем мы можем закрыть фрейм.
let url = "https://example.com";
let frame = window.open(url, "Popup", "height=500,width=600,left=100,top=100,resizable=yes,scrollbars=no,toolbar=no,status=no");
window.addEventListener('focus', (e) => {
if (!frame.closed) frame.close()
})