window.open() в то же окно?

aZa

Новичок
window.open() в то же окно?

Я в JavaScript практически не разбираюсь (знаю только самые-самые азы), а потому хотелось бы узнасть у вас решение проблемы:

Есть главная страница, с листингом товара. Каждые товар имеет кнопку-линк "Add To Cart". Так вот при нажатии на такиую кнопку должно открывать новое окошко с заданным URL-ом, то есть: window.open(URL, 'cart', '<settings>')

Посетитель дальше просматривает каталог и кликает на другой копке-ссылке и вот тут-то и возникает проблема: нужно при УЖЕ открытом окошке-корзинке - просо обновить его с новой ссылкой. Я использую тот же window.open(URL, 'cart', '<settings>'), но он мне открывает все новые и новые окна. :(

Подскажите кто решение.

P.S.: это под PayPal Shopping Cart все пишется.
 

Bloody

Guest
...
win=window.open(URL, 'cart', '<settings>');
...
...
if(win.closed)win=window.open(URL, 'cart', '<settings>');
else win.location.href="Новый URL";
...
 

aZa

Новичок
Вот собственно код, который я попытался с твоей подсказки использовать у себя в скрипте:

Код:
<script language="javascript">
<!--

var cartWindow

function opencart(url) {
	if (cartWindow.closed) {
    	cartWindow = window.open(url,'cart','width=600, height=400, scrollbars, location, resizable, status');
    } else {
    	cartWindow.location.href = url;
    }

}

//-->
</script>
Но в таком случае не открывается вообще ничего при вызове через

<a href="#" onclick="opencart('http://somewebserver.com/someaddressline/);">click here</a>! :( :(

Я где-то ошибаюсь в чем-то очень-очень простом, я почти в этом уверен ...
 

Bloody

Guest
<script language="javascript">
<!--

var cartWindow

function opencart(url) {
if ((!cartWindow)||cartWindow.closed) {
cartWindow = window.open(url,'cart','width=600, height=400, scrollbars, location, resizable, status');
} else {
cartWindow.location.href = url;
}
cartWindow.focus();
}

//-->
</script>
 

aZa

Новичок
Большое спасибо - все работает!...:) Но у меня появился еще один вопрос: значит бродим вот мы по одной страничке каталога, кликаем на ссылочки Add To Cart, все добавляется/обновляется как положено, но ... когда мы переходим на другую страницу каталога (скажем в другую категорию товаров) и кликаем уже там на Add To Cart - опять же открывается опять же новое окно с корзинкой :( ..... Что можно сделать? (я так понимаю нужно как-то "обыграть" объявление переменной var cartWindow в самом начале?.. или нет?)
 

Bloody

Guest
Есть один вариант, (но он не работает если открывать в "новом" окне, а также не проверял, работает ли в Нетшкафе):

Вот скрипт:

<script language="javascript">
<!--

function opencart(url) {
if ((!window.cartWindow)||window.cartWindow.closed) {
window.cartWindow = window.open(url,'cart','width=600, height=400, scrollbars, location, resizable, status');
} else {
window.cartWindow.location.href = url;
}
window.cartWindow.focus();
}

//-->
</script>

Тогда даже дополнительных проверок не надо делать.
Вот только проверь, работает ли в Нетшкафе...
 

Bloody

Guest
Или еще один возможный способ - проверять открыто ли окно до перехода в другой каталог, потом закрывать окно, затем посылать через URL какую-нибудь переменную, которая покажет, было окно открыто, или нет. И если было, то открыть новое такое же окно в новом location.
 

aZa

Новичок
Разницы в работе скриптов с window. и без никакой не заметил (строчку с объявлением переменной carWindow тоже убирал) - та же самая ситуация: если кликаю на одной странице по разным ссылкам "Add To Cart", то все ок, а когда перехожу на другую страницу и кликаю там "Add To Cart" - открывается новое окно (как бы "забывает" про старое).

По поводу второго варианта - как-то это уж слишком сильно, нет? :D

P.S.: похоже пора конкретно браться за JavaScript ...
 

Bloody

Guest
Тогда попробуй в странице "корзины" засандалить подобный скрипт:
<script language="javascript">
<!--

function check_opener(){
if((opener)||(!opener.closed)){
opener.cartWindow=window;
}
}

//setInterval("check_opener()",10);

//-->
</script>
 

aZa

Новичок
В страницу корзины никакого кода добавить не могу :( - она находится на стороне PayPal-а, а не сайта, и просто открывается по ссылке, получая параметры добавляемого товара через $_GET[].
 

Bloody

Guest
Понятно... Тогда дело обстоит гораздо хуже...
Ну, в крайнем случае: тебе так уж позарез нужно передавать параметры для открываемого окна? Если нет, то можно сделать гораздо проще...
 

aZa

Новичок
Собственно именно в этих параметрах и кроется информация о добавляемом в корзинку предмете ...

Можно сделать гораздо проще?
 

Bloody

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

aZa

Новичок
нет, совершенно необязаьтельно ... главное - это информация в ссылке по $_GET, все остальное - "косметика"
 

Bloody

Guest
Ну, тогда можно все просто:
Напиши маленькую PHP-скриптину, которая всего лишь форвардит URL-параметры, и чтобы она содержала JavaScript типа такого:

<SCRIPT>
parent.focus();
location.href="cart.php?"+"<?php echo $_SERVER['QUERY_STRING']; ?>";
</SCRIPT>

А потом вызывай этот скрипт с нужными параметрами, а в ссылке пиши TARGET="cart"!..
 

aZa

Новичок
стоп-стоп-стоп ...что-то я уже запутался. есть страница каталога, где перечислены разные товары с ссылочками на PayPal-вскую корзину, которая "принимает в себя" товары через $_GET. требуется сделать так, чтобы по клику каждый Add To Cart обновлялось только уже открытое окно этой корзинки (либо открывалось, если еще закрыто). вот.

мне не совсем понятно какой PHP-скрипт написать советуешь и что куда редиректить/таржетить? :)

What we have:
- catalog.php: на моем серваке - могу делать, что хочу; содержит листинг товаров с ссылочками на PP (который идет ниже)
- какой-то_растакойто.php срипт у PayPal, которому передаем что-то вроде ?username=blah&tem=blah и т.д. вот его и нужно все вреия обоновлять в одном и том же окне, после кликов на ссылочки в catalog.php ... с ним я сделать ничего не могу :(
 

Bloody

Guest
Создаешь у себя на серваке скрипт, допустим, cart.php.
Он будет содержать вот такой контент:

<SCRIPT>
parent.focus();
location.href="Название_Скрипта_Pay_Pal?"+"<?php echo $_SERVER['QUERY_STRING']; ?>";
</SCRIPT>

Этот скрипт нужен для того, чтобы при открытии нового URL в "корзине" окно становилось активным (переносилось наверх).
И все. Потом, вместо того, чтобы вызывать сразу Pay Pal'овский скрипт, просто вызываешь свой cart.php с нужными параметрами. Только в атрибуте TARGET тэга A указывай "cart" (в-смысле: TARGET="cart".
Ну вот, схема приблизительно такая :)
 
Сверху