Как заставить функцию открывать URL в окне с указанным ID, а не в новом?

  • Автор темы Автор темы Avenus
  • Дата начала Дата начала

Avenus

Under Glory Yield
Как заставить функцию открывать URL в окне с указанным ID, а не в новом?

Привет, всем!

Открываю новое окно:
PHP:
<span onClick="wopen('/user/msg/','uid1')">Message</span>
Функция wopen:
PHP:
function wopen(url,name){
var w=window.open(url,name,"width=400,height=300");
}
Почему-то каждый раз при onClick на "Message" в теге span открывается новое окно вместо обновления окна с name="uid1".

Подскажите, пожалуйста, как решить проблему?
 
Надо перестать врать, потому что приведенный код как раз обновляет старое окно. По крайней мере в ФФ3 и ИЕ7
 
Да, dimagolov, перестань, врать...
Проверь в Google Chrome, к примеру!

-~{}~ 07.04.09 01:04:

Да и только, что проверил в IE7 - не работает!

-~{}~ 07.04.09 01:07:

Вот, проверил в FF3 - только в нем и рабоает :)
 
ну значит у тебя какие-то особенные IE7 и Chrome. У меня что они, что Opera и Safari ведут себя ожидаемо, то есть обновляют уже открытое окно.
Код:
<html>
<head><script>
function wopen(url,name){
var w=window.open(url,name,"width=400,height=300");
}</script>
</head>
<body>
<span onClick="wopen('/test/sess-id.php','uid1')">Message</span>
</body>
</html>
 
dimagolov, может быть есть проблема в том, как подставляется name?

Вот часть PHP-кода (опущу слева и справа):
PHP:
."onClick=\"wopen('/".strtolower($uid)."/msg/','w".$uid."');\"".
 
Avenus, кому лучше знать, тебе или мне? у тебя что, кроме всего та страничка, по которой ты кликаешь, обновляется между кликами?
 
Да, именно такой код, который ты привел почему-то работает... значит причина в другом

-~{}~ 07.04.09 01:25:

у тебя что, кроме всего та странична, по которой ты кликаешь обновляется между ними?
Не понимаю о чем ты...

-~{}~ 07.04.09 01:31:

А если, теоретически, то вследствие чего может открываться каждый раз новое окно?
 
я о том, что что бы ты не выводил через php, у тебя html статичный выходит, и если страничку не обновлять, то id поменяться не может, то есть открыть другое окно тоже не может.

а вот если страничка обновляется и ты генеришь по-новой html, то id может оказаться другим.

сохрани полученный html в файл и проверь на нем, будут другие окна открываться или нет.

-~{}~ 06.04.09 18:33:

еще ты можешь JS-ом менять ф-ю onclick и ...
 
сохрани полученный html в файл и проверь на нем, будут другие окна открываться или нет
В сохраненном html новые окна не открываются, все работает...

-~{}~ 07.04.09 01:57:

если страничку не обновлять, то id поменяться не может, то есть открыть другое окно тоже не может.
ID - это и есть name?
Если так, то я ведь его сам указываю. Почему нельзя обновлять страницу тогда? Я думаю, это никак не влияет на открытие новых окон.

-~{}~ 07.04.09 02:04:

Кстати, на сохраненном html новое окно не содержало контента, я изменил url, чтобы контент загрузился...
Т.е. указал не относительный путь, а абсолютный...
PHP:
onClick="wopen('http://site.com/user/msg/','w1');"
И проблема на лицо, снова открываются по onClick каждый раз новые окна.

-~{}~ 07.04.09 02:08:

Видимо, какие-то JavaScript функции пересекаются, из-за этого проблема...

-~{}~ 07.04.09 02:10:

Да, точно... отключая поочереди подключаемые библиотеки, увидел, что перестали новые окна открываться :-)
 
ну можно устроить голосование: у меня в ie7 тоже работает, хотя в msdn ничего про такое поведение не сказано, в отличие от mdc
попробуй так: в первый раз используешь window.open, сохраняешь ссылку на окно, в последствии изменяешь содержимое окна через ссылку
 
x-yuri, да, спасибо, конечно...
я нашел причину: в открываемом окне сразу после его загрузки создается ajax запрос...
Если его отключить, то новые окна не открываются.
Но, блин, как же его отключать, если он нужен :-(
 
видимо при запросе меняется window.name со всеми вытекающими. другого объяснения не могу выдумать.
 
В открывающемся окне выполняется скрипт:
PHP:
window.onload=function(){
...
getMsg();
}
В этой getMsg() обрабатывается запрос к серверу с ответом в простой текстовой форме, вроде никаких изменений window.name не происходит.
И в этой же функции getMsg() стоит setTimeout("getMsg",3000)
Чтобы каждые 3 секунды проверять новые сообщения...

Может быть это причиной?
Т.к. без вызова функции getMsg() работает верно, новые окна не открываются. При этом на странице в открытом окне выполняются другие ajax запросы и они не вносят проблем. По сути такие же, только без timeout.

-~{}~ 07.04.09 02:45:

Запрос все же отличается... метод GET, а остальные POST.

-~{}~ 07.04.09 03:03:

В GET-запросе одна из передаваемых переменных была с именем name:
PHP:
...?name="+val+"...
Заменил ее на sname - все заработало...
Получается, что она и стала новой переменной для window.name?
dimagolov, твоя наводка оказалась верной :-)
Спасибо!
 
это все в IE7 происходило? честно говоря, не ожидал такого... в общем, это последствия того, что IE отображает элементы DOM (как видно не только) по имени и id в свойства глобальной области видимости, то есть window. Из-за этого выходят такие накладки - сделай у себя input с именем name и он перекроет свойство window.name.

общий вывод - не называйте элементы стандартными именами, чтобы в IE не напороться на проблемы.
 
ну попробовал я сделать input с именем name: имя окна не переопределяется. Если изменить имя input'а на name2, то window.name2, естественно, появляется
пробовал также периодически посылать GET-запросы во втором окне с параметром name: новые окна все равно не открываются
p.s. интересно было бы, если бы ТС выложил минимальный код, для которого открываются новые окна
 
x-yuri, там чем-то делался ajax запрос. возможно, что либа кривая и она тупо срет себе переменные запроса в глобальную область видимости. Или ТС так это написал. Но как бы там ни было, называть элементы стандартными именами себе дороже при любых раскладах.
 
Да, спасибо! Действительно лучше стандартными именами переменнных не пользоваться :)
 
Сверху