Начало } Окна } Закрытие окна на JavaScript

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

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

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

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

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

<a href="/service.php" _mce_href="/service.php" 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, и позволяем ссылке на раздел открыться в текущем окне