Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > window.close() - проблемы в разных броузерах


Автор: Гриша 4.1.2006, 21:40
Здравствуйте.

Делаю такую ссылку: <a href="vingrad.ru" onclick="window.close" target="_blank">Ссылка</a>
Что я ожидал от этой ссылки: то что, при нажатии на нее откроектся новое окно, с указанным url, а старое закроется. В Explorer все так и работает. Но в дремучем Opera (2005 год) просто зарывается окно, я это броузер терпеть немогу, с ним всегда геморой, он работатет на своей волне.

Подскажите возможное решени этой проблемы. // Netscape работает как opera, только что проверил. Что я неверно сделал код?

Автор: Innuendo 4.1.2006, 22:42
у мен в эксплорере твой код не работает....
ну и в Мозилле тоже..
в ИЕ работает при таком: onclick="window.close()", но выходит табличка с запросом на закрытии окна...
а в Мозилле нету и такого... есть ещё какие-то методы закрытия.. надо искать...

Автор: Гриша 5.1.2006, 11:58
Innuendo, спасибо за ответ.

Сначала при помощи javascript я открываю новое окно, и как раз при помощи это кода
<a href="vingrad.ru" onclick="window.close" target="_blank">Ссылка</a> я закрываю такое окно. Такие окна закрываются без предупреждения.
Эта функция стандартная. Netscape (Mozilla) и Opera, окна то закрываются, но вот ссылка не открывается.
Ведь я хочу чтобы открылось новое окно, а строе закрылось.
Как же это сделать?

Автор: Innuendo 5.1.2006, 13:02
странно, запустил твой код:
окна нигде не закрываются.... и ссылка открывается

Автор: Illuminaty 5.1.2006, 13:07
Что то я видимо совсем после праздников опух....
Не понимаю, если тебе надо закрыть старую страницу (на которой находится ссылка) и открыть новую, то зачем писать такой код? Разве при активации ссылки тоже самое не происходит? Т.е. новая страница перекрывает старую... Не понимаю...

Автор: Innuendo 5.1.2006, 13:16
точно..в данном случае открывается новое окно, и он хочет закрыть старое...
а если убрать target="_blank", то ссылка просто откроется в этом окне... что ещё надо? smile

Автор: Гриша 5.1.2006, 15:46
Спасибо всем за ответы.
Во первых код я пишу немного неправильно, забыл скобки:
<a href="http://vingrad.ru" onclick="window.close()" target="_blank">Ссылка</a>

Во вторых я открываю окно при помощи javascript размеров 400x500, с параметрами: полоса прокрутки и изменение размера.
При нажатии на указанную ссылку я хочу чтобы октрылось новое окно (уже обычное окно), в котором буде октрыта страница сайта, допустим vingrad.ru, ну не буду же я открывать ее в окне где есть только полоса прокрутки и размер окна 400x500 пикселей.
И я также хочу сделать так, чтобы при открытии нового окна старое окно размером 400x500 закрывалось.

Вы теперь поняли то что я хочу сделать?

Получается, что описанный выше код закрывает окно, но не отрывает новове во всех броузерах кроме IE.

Автор: Illuminaty 5.1.2006, 16:19
Попробуй так:
Код

<script type="text/javascript" language="javascript">
function CloseWindow (path) {
    window.close();
    window.open(path, "w", "YOUR_PARAMETRS");
}
</script>
<a href="javascript:CloseWindow('http://vingrad.ru')">чего от меня хотят????</a>
Насколько я понял из теста, в Opere страница открывается в новой вкладке того же окна, которое ты закрываешь

Автор: Гриша 5.1.2006, 18:26
Illuminaty, спасибо за код. Сейчас попробую.
Только в Opera проблема ткакая, если в новом окне, октрытом при помощи javascript, нажать на такую ссылку <a href="http://vingrad.ru" onclick="window.close()" target="_blank">Ссылка</a>, то окно просто закроется.

А если нажать на ссылку <a href="http://vingrad.ru" target="_blank">Ссылка</a>, то откроется новое окно нормально, а старое останется - так и должно быть. Так вот, я добавил window.close(), чтобы открывалось новое окно, а старое закрывалось (так работает только в IE)

И еще мне нужно чтобы ссылка была прямая, т.е. <a href = "htt://vingrad.ru" .... >Ссылка</a>,
я щас попробую что-то сделать в с вашим кодом. А вообще я в javascript знаю какие-то основы и все, никак немогу разобраться с этим языком, Ssi, Perl, PHP, Css - напного проще давались, наверное книги такие были.

Автор: Гриша 5.1.2006, 19:01
Illuminaty, в OPERA и IE ваш код работате, а вот в Netscape, получается так, что он как бы открывается в этом же окне, только на весь экран (может быть новое окно такое - безразницы), и высота у окна больше экрана, я даже ниц не могу увидеть.
ЧТо-то не то.

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

Автор: Гриша 5.1.2006, 20:14
Ну вот я в итоге сделал так: <a href="javascript:window.close();window.open('http://vingrad.ru/');">Ссылка</a>, пратически тоже самое, что и у Illuminaty, данный вариант кода работает во всех 3 броузерах. Но мне нужна прямая ссылка.

Я попытался сделать эту ссылку примерно так как описано в другой моей теме: http://forum.vingrad.ru/index.php?showtopic=76595 - не получилось. И кстати мне несовсем понятно почему, ведь там как раз я и сделал код открытия прямой ссылки в новом окне, а пытаясь соединить с кодом в данной теме, получается что ссылка как бы октрывается в текущем окне и потом, закрывается (по условию кода уже).

==============================
Я вот такой вариантик придумал хитрый:
<a href="http://vingrad.ru/" onclick="window.close();window.open('http://vingrad.ru/');">Ссылка</a>
- как видите, здесь на самом деле неважно, что мы укажем в href="...", получается, что данный скрипт окрывает ссылку по указанному адресу href="http://vingrad.ru/" в текущем окне, потом сразу же закрывает это окно window.close() и открывает новое окно по указанному адресу window.open('http://vingrad.ru/');

И конечно я сделал так, что если пользователь попадает на страницу, которая открываетя уменя в новом окне, не по ссылке с моего сата, а например с поисковика, то будет отображаться такая ссылка <a href="http://vingrad.ru/">Ссылка</a>

============================
Вот хотелось бы все таки сделать данный код: <a href="http://vingrad.ru/" onclick="window.close();window.open('http://vingrad.ru/');">Ссылка</a> чтобы он окрывал правильно именно ту страницу которая указана в href=""

Если есть соображения, то напишите пожалуйста.

Автор: Sardar 7.1.2006, 16:26
Цитата(Гриша @ 5.1.2006, 19:14 Найти цитируемый пост)

- как видите, здесь на самом деле неважно, что мы укажем в href="...", получается, что данный скрипт окрывает ссылку по указанному адресу href="http://vingrad.ru/" в текущем окне, потом сразу же закрывает это окно window.close() и открывает новое окно по указанному адресу window.open('http://vingrad.ru/');

Нет, переход по href срабатывает позже чем отрабатывает onclick.
Цитата(Гриша @ 5.1.2006, 19:14 Найти цитируемый пост)

чтобы он окрывал правильно именно ту страницу которая указана в href=""

Можно так:
Код
<a href="http://vingrad.ru/" target="_blank" onclick="window.close(); window.open(this.href); return false;">Ссылка</a>

Автор: Гриша 8.1.2006, 00:40
Sardar, огромное спасибо вам за помощь. Это супер вариант. Я увидел, что даже если окно октрывалось без помощи javascript, то при закрытии такого окна IE не просит разрешение на его закрытие, это значительно упрощает работу. А то при помощи php мне приходилось выводить сыылки в зависимости от того как окно открывалось.

А то, что в моем коде href="http://vingrad.ru/" срабатывает после onclick, я не совсем это понял, ведь оно же все равно закрывается при помощи window.close()

Еще раз спасибо вам за такой хороший код.

Автор: Sardar 8.1.2006, 00:57
Цитата(Гриша @ 7.1.2006, 23:40 Найти цитируемый пост)
рабатывает после onclick, я не совсем это понял

Функционально происходит именно то что ты хочешь smile
Если же отследить по шагам что на самом деле происходит, то увидим, что браузер заставляет сначала отработать onclick (что логично) и только потом перейти по ссылке. Таким образом мы можем остановить переход традиционным способом вернув false из обработчика события, что в моём примере и происходит.

Другими словами: если у пользователя включен JS, то ссылка откроеться в твоём новом окне с параметрами, иначе ссылка всё равно откроеться в новом окне (target="_blank"), а вот в каком окне это уже зависит от бразуера.

Цитата(Гриша @ 7.1.2006, 23:40 Найти цитируемый пост)
Еще раз спасибо вам за такой хороший код.

Это не код, это короткая строка кода smile

Автор: Гриша 8.1.2006, 15:02
Sardar, спасибо за разъяснение. Тяжело мне как-то с javascriptom разабраться, вот никак он мне не дается.
Но у меня на сайте действительно очень многое зависит от javascript, без него не было бы той интерактивности, которая есть. Без javascript даже пришлось бы внести изменения в дизайн, а во всем мне помогли участники этого форума, ух даже незнаю чтобы я делал без этого форума.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)