2010-09-09 5 views
9

У меня есть всплывающее окно, и на этой странице у меня есть следующий код в теле.Html javascript, чтобы открыть новое окно и закрыть текущее окно

<a href="http://www.somesite.com" target="_blank" onClick="javascript:window.close()"><img src="...something"/></a> 

Цель состоит в том, чтобы это всплывающее окно закрывается, когда пользователь нажимает на ссылку изображения, и открыть новую страницу и быть направлены на http://www.somesite.com.

Он работает в IE и Chrome, но не в Firefox. Всплывающее окно закрывается, но новое окно не открывается.

Любые идеи?

+1

Это было предложено до: http://stackoverflow.com/questions/760422/ – user123444555621

+1

@ Pumbaa80 - Это не то, что спросил ОП. Этот вопрос касается того, почему окно не закрывается. Окно OP закроется, но не откроет новый. – Ender

+0

Справа. Извините, я не читал полностью. – user123444555621

ответ

12

Да, я могу воспроизвести это - интересно. setTimeout работы вокруг него:

onClick="javascript: setTimeout(window.close, 10);" 

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

Редактировать: лучше сделать это 10 мс задержка - с 1 мс Chrome не закрывает окно.

+0

Это работает, спасибо, я думаю, вы правы, возможно, просто прекратите выполнение другой операции после ее закрытия. make sense ~ – Eatdoku

2

Когда вы добавляете некоторые функции в событие click элемента через javascript, эта функциональность выполняется до события кликов по умолчанию (в этом случае открывается новая страница), чтобы разрешить возможность перехвата и переопределения по умолчанию мероприятие. Поведение по умолчанию будет выполняться только тогда, когда и если событие возвращает логическое значение true.

В этом случае дополнительной функциональностью было бы закрыть окно, и я предполагаю, что Firefox решил интерпретировать это как «мы все сделали здесь», поэтому событие click никогда не возвращает true, и, следовательно, новая страница никогда не открывается.

Предложение Евгения использовать короткий тайм-аут позволит событию click вернуть true до закрытия окна, что позволит открыть новое окно.

2

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

function whenClicked() 
{ 
    window.close(); 
    opener.location.href = "http://www.somesite.com"; 

} 

или это, если ppage должен открыть в новой вкладке:

function whenClicked() 
{ 
    window.close(); 
    opener.open(http://www.somesite.com, '_blank'); 
} 
+0

Простой, но элегантный фикс, который не возится с тайм-аутами. Длительность задержки очень сложна, чтобы соответствовать всем условиям. – AbelSurace

Смежные вопросы