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

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".

Подскажите, пожалуйста, как решить проблему?
 

dimagolov

Новичок
Надо перестать врать, потому что приведенный код как раз обновляет старое окно. По крайней мере в ФФ3 и ИЕ7
 

Avenus

Under Glory Yield
Да, dimagolov, перестань, врать...
Проверь в Google Chrome, к примеру!

-~{}~ 07.04.09 01:04:

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

-~{}~ 07.04.09 01:07:

Вот, проверил в FF3 - только в нем и рабоает :)
 

dimagolov

Новичок
ну значит у тебя какие-то особенные 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>
 

Avenus

Under Glory Yield
dimagolov, может быть есть проблема в том, как подставляется name?

Вот часть PHP-кода (опущу слева и справа):
PHP:
."onClick=\"wopen('/".strtolower($uid)."/msg/','w".$uid."');\"".
 

dimagolov

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

Avenus

Under Glory Yield
Да, именно такой код, который ты привел почему-то работает... значит причина в другом

-~{}~ 07.04.09 01:25:

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

-~{}~ 07.04.09 01:31:

А если, теоретически, то вследствие чего может открываться каждый раз новое окно?
 

dimagolov

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

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

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

-~{}~ 06.04.09 18:33:

еще ты можешь JS-ом менять ф-ю onclick и ...
 

Avenus

Under Glory Yield
сохрани полученный 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:

Да, точно... отключая поочереди подключаемые библиотеки, увидел, что перестали новые окна открываться :)
 

x-yuri

Новичок
ну можно устроить голосование: у меня в ie7 тоже работает, хотя в msdn ничего про такое поведение не сказано, в отличие от mdc
попробуй так: в первый раз используешь window.open, сохраняешь ссылку на окно, в последствии изменяешь содержимое окна через ссылку
 

Avenus

Under Glory Yield
x-yuri, да, спасибо, конечно...
я нашел причину: в открываемом окне сразу после его загрузки создается ajax запрос...
Если его отключить, то новые окна не открываются.
Но, блин, как же его отключать, если он нужен :-(
 

dimagolov

Новичок
видимо при запросе меняется window.name со всеми вытекающими. другого объяснения не могу выдумать.
 

Avenus

Under Glory Yield
В открывающемся окне выполняется скрипт:
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, твоя наводка оказалась верной :)
Спасибо!
 

dimagolov

Новичок
это все в IE7 происходило? честно говоря, не ожидал такого... в общем, это последствия того, что IE отображает элементы DOM (как видно не только) по имени и id в свойства глобальной области видимости, то есть window. Из-за этого выходят такие накладки - сделай у себя input с именем name и он перекроет свойство window.name.

общий вывод - не называйте элементы стандартными именами, чтобы в IE не напороться на проблемы.
 

x-yuri

Новичок
ну попробовал я сделать input с именем name: имя окна не переопределяется. Если изменить имя input'а на name2, то window.name2, естественно, появляется
пробовал также периодически посылать GET-запросы во втором окне с параметром name: новые окна все равно не открываются
p.s. интересно было бы, если бы ТС выложил минимальный код, для которого открываются новые окна
 

dimagolov

Новичок
x-yuri, там чем-то делался ajax запрос. возможно, что либа кривая и она тупо срет себе переменные запроса в глобальную область видимости. Или ТС так это написал. Но как бы там ни было, называть элементы стандартными именами себе дороже при любых раскладах.
 

Avenus

Under Glory Yield
Да, спасибо! Действительно лучше стандартными именами переменнных не пользоваться :)
 
Сверху