Закрытие окна на JavaScript

Обычно, если новое окно было открыто с помощью JavaScript'а, пишется просто:

<a href="javascript:self.close()">закрыть окно</a>

Но тем самым мы нарушаем несколько условий - ссылки должны работать с отключённым JavaScript'ом и не должны сбивать с толку, если в текущее окно пользователь попал, например, с поисковой машины, минуя "родителя".

Поэтому я применяю обычно другой метод. Прежде всего, саму ссылку я называю, как правило, "вернуться в раздел" или же указываю в какой именно раздел (например, вернуться в раздел "услуги").

В HTML коде ссылка выглядит так:

<a href="/service/" onClick="return g(this.href)">вернуться в раздел "услуги"</a>

Как видите, при клике на ссылку вызывается функция g(this.href). Вот как она выглядит:

function g(url){
  if (opener){
    if (opener.closed)
      window.open(url, "");
    else if (opener.location.href.search(url) == -1)
      opener.location.href = url;
    self.close();
    return false;
  }
  return true;
}

Функция проверяет несколько условий. Во-первых, существует ли родительское окно (opener). Другими словами, было ли окно открыто через JavaScript или же обычным способом.

После этого, если родитель жив-здоров, смотрим, не закрыт ли он (opener.closed). Если да, то мы открываем ссылку в простом новом окне (window.open(url, "")). Ежели родитель открыт, мы делаем ещё одну проверку - не поменял ли он свой адрес, т. е. не переходил ли пользователь на другую страницу (opener.location.href.search(url) == -1).

В итоге, после всех вложенных проверок, мы закрываем дочернее окно (self.close()) и возвращаем false, если всё-таки окно было открыто JavaScript'ом, или же возвращаем true, и позволяем ссылке на раздел открыться в текущем окне.


Автор: Шуркаев Александр Владимирович
Источник: Заметки HTML кодера
.