Как мне убедиться, что автоматически закрытое окно закрывает все порожденные окна? - PullRequest
0 голосов
/ 13 ноября 2009

У меня есть следующий сценарий:

  1. Пользователь на одном сайте нашего клиента нажимает на ссылку. Он выполняет автоматический вход с их учетными данными на наш сайт, который запускается в новом окне.
  2. Пользователь на нашем сайте выходит из системы и отправляется на страницу с JavaScript window.close(), которая закрывает окно. Если бы они были клиентами, которые вошли на наш сайт напрямую, они бы вернулись на страницу входа в систему, но при автоматическом входе они не будут использоваться для страницы входа в систему, поэтому автоматическое закрытие страницы лучше.

Однако иногда случается следующее

  1. Пользователь на одном из веб-сайтов наших клиентов щелкает ссылку, выполняет автоматический вход со своими учетными данными на наш сайт, который открывается в новом окне.
  2. Находясь в нашем приложении, они нажимают ссылку «Справка», которая в настоящее время является еще одним всплывающим окном.
  3. В какой-то момент они выходят из нашего приложения, которое закрывает это окно.
  4. Окно справки все еще открыто.
  5. Пользователь нажимает на ссылку в окне справки.
  6. Пользователь, который больше не входит в систему, теперь переходит к экрану входа в это окно справки.
  7. МАССОВАЯ ИСТЕРИЯ!

Итак, я хотел бы убедиться, что, когда исходное окно закрыто, оно также закрывает все всплывающие окна, которые оно порождает. Я полагаю, это можно сделать в JavaScript, но как?

ADDENDUM: Предлагаемые ниже предложения хороши, но проблема в том, что страница, на которой пользователь закрывается, когда браузер закрывается, не является той же страницей, которая порождает всплывающее окно, поэтому дескрипторы страниц исчезли. Как я могу получить дескриптор всплывающего окна с определенным именем?

Ответы [ 3 ]

2 голосов
/ 13 ноября 2009
<html>
<head>
<script>
var childwindows=new Array();
function openchild(){
    var childW=window.open('in.html');
    childwindows[childwindows.length]=childW;
}

function closewindow(){
    for(i in childwindows){
        if(childwindows[i] && !childwindows[i].closed)  {childwindows[i].closewindow();}
    }
    window.close();
}
</script>
</head>
<body>
<br/>
<a onclick="openchild();">open child window</a>
<br/><br/>
<a onclick="closewindow();">close me</a>
</body>
</html>
1 голос
/ 13 ноября 2009

Отслеживайте имена окон, с которыми вы открываете всплывающие окна.

Иметь страницу, которая чисто делает window.close ()

Когда вы делаете обычный window.close (), убедитесь, что вы делаете window.open («наша страница закрытия», windowNameIStored) для каждого из всплывающих окон.

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

0 голосов
/ 13 ноября 2009

Прекратите использовать всплывающие окна, это не 1998 год :)

Серьезно, хотя со всеми встроенными функциями браузера и сторонними приложениями, которые также блокируют их, они стали в значительной степени ненадежными. Вы на 100% уверены, что всплывающее окно открыто? Вам нужно будет проверить, чтобы убедиться, но, возможно, стороннее приложение закрыло его после того, как ваш тест закончился, кто знает, так что теперь у клиента плохой опыт. Если они на самом деле платят клиентам, ваш клиент может потерять деньги. Конечно, вы можете поместить сообщение с надписью «отключить блокировку всплывающих окон», но, честно говоря, сколько пользователей на самом деле знают, как это сделать?

Каждый раз, когда меня просят сделать всплывающее окно, я просто смотрю на того, кто его запрашивал, как будто он говорит на каком-то другом языке, а затем спрашиваю, наступил ли это 1998 год. следующие: плохой дизайн пользовательского интерфейса, невежественные менеджеры и / или небрежная / ленивая разработка. Хотя я уверен, что есть и другие причины.

Только мои 2 цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...