Właśnie doświadczam pomroczności jasnej i nie wiem jak rozwiązać
teoretycznie banalny problem. Chciałbym, aby po przeładowaniu się strony WWW
otwierało się drugie okienko z jakimś obrazkiem. Za każdym razem może to być
obrazek o innych wymiarach. Chciałbym aby okno dostosowywało swój rozmiar do
wymiarów obrazka. Za diabła nie wiem jak to zrobić. Nie ma problemu, aby
wywołać window.open() z odpowiednimi parametrami. Problem w tym, że po
przeładowaniu okna głównego i powtórnym wywołaniu open(url,name,feature)
parametry "feature" są ignorowane. Wpadłem więc na pomysł, że zamknę to okno
i jeszcze raz je otworzę. No i kolejny kłopot: jak zamknąć okno o określonej
nazwie ? Jak zbudować referencję do niego ? A może jest to niewłaściwe
podejście ?
Marek
Witam.
[...]
parametry "feature" są ignorowane. Wpadłem więc na pomysł, że zamknę to
okno
i jeszcze raz je otworzę. No i kolejny kłopot: jak zamknąć okno o
określonej
nazwie ? Jak zbudować referencję do niego ? A może jest to niewłaściwe
podejście ?
<script language="JavaScript" type="text/javascript"
<!--
function otworz(){
nazwa_okna=window.open("test.html","nazwa2","width=100,height=200");
}
}
<script language="JavaScript" type="text/javascript"
<!--
function otworz(){
nazwa_okna=window.open("test.html","nazwa2","width=100,height=200");
}function zamknij(nazwa_okna){
if (nazwa_okna.closed){
alert("Okno już zamknięte");
}else{
alert("Zamykam okno");
nazwa_okna.close();
}
}
//--
</script
Marek
Wszystko ekstra tylko skąd weźmiesz do wywołania funkcji zamknij()
parametr
nazwa_okna ? Przypomnę, że ta funkcja będzie wołana po przeładowaniu się
strony zawierającej ten skrypt, a więc nie będziemy mieli dostępu do
handlera tworzonego przez otworz(). Dokładnie na tym się zacięłem.
Uproszczę może problem. Mamy otwarte okno o nazwie takiej jak
zaproponowałeś - "nazwa2". W innym oknie chciałbym zamknąć okno "nazwa2".
Jak to zrobić ? Obiekt window.nazwa2 nie istnieje, aby można to było
Spójrz na skrypt jeszcze raz: nazwa okna to "nazwa_okna", a nie "nazwa2". A
skąd ją wziąść. Wystarczy, że zawsze bedzie taka sama.
[...]
[...]
| Jak to zrobić ? Obiekt window.nazwa2 nie istnieje, aby można to było
zrobić.Spójrz na skrypt jeszcze raz: nazwa okna to "nazwa_okna", a nie "nazwa2".
A
skąd ją wziąść. Wystarczy, że zawsze bedzie taka sama.
teoretycznie banalny problem. Chciałbym, aby po przeładowaniu się strony
WWW
otwierało się drugie okienko z jakimś obrazkiem. Za każdym razem może to
być
obrazek o innych wymiarach. Chciałbym aby okno dostosowywało swój rozmiar
do
wymiarów obrazka. Za diabła nie wiem jak to zrobić. Nie ma problemu, abyMarek
MySZ
Spójrz na skrypt jeszcze raz: nazwa okna to "nazwa_okna", a nie "nazwa2".
A
skąd ją wziąść. Wystarczy, że zawsze bedzie taka sama.
handler=window.open(url,windowName,features)
Twój skrypt:
function otworz(){
nazwa_okna=window.open("test.html","nazwa2","width=100,height=200");
}
function zamknij(nazwa_okna){
if (nazwa_okna.closed){
alert("Okno już zamknięte");
}else{
alert("Zamykam okno");
nazwa_okna.close();
}
}
Po przemysleniu (i sprawdzeniu), rzeczywiście może byc problem z
przekazaniem obiektu. Przyszło mi na myśl, że zdarzeniem UnLoad mógłbyś
zamykać otwarte okno, a po przeładowaniu otwierać nowe. Może to jest
rozwiązanie?
Marek
Tak więc dopóki okno nie zostanie zamknięte, to nie można go otworzyć z
innymi wymiarami. Pytanie jak TO właśnie zrobić, a nie jak otwiera się okna
w JS. Poradziłem sobie zamykając okno "mojeOkno" w wyniku zdarzenia
"onUnload". Tymczasem do przyszłych celów chciałbym wiedzieć jak zamknąć
"mojeOkno" z chwilą powtórnego załadowania się okna - rodzica. Reloading
powoduje utratę zawartości zmiennych, w tym handlera do okna "mojeOkno".
Prościej: czy wiedząc, że otwarte jest okno o nazwie "mojeOkno" można je
zamknąć ?
Marek
Dzięki za info :)) Nie zrozumiałeś moich intencji. :) Rozmiary obrazka
znamMarek
MySZ
Yoop
mozna tez sprawdzac czy okno jest otwarte i na wszelki wypadek je
zamykac przed otwarciem nowego
(...) 'MojeOkno1' 'MojeOkno2' itd. i kazdy obrazek otworzy sie w
indywidualnym
oknie.
mozna tez sprawdzac czy okno jest otwarte i na wszelki wypadek je
zamykac przed otwarciem nowego
Marek
[ rrrrrany, ale mieszacie ;)))) ]
I tu dotykasz sedna sprawy. Jak zamknąć okno o określonej nazwie jeśli nie
dysponujemy jego handlerem ? A może istnieje szansa uzyskania handlera
jeśli
znamy nazwę okna ?
1. nie ma takiego, ok, jest tworzone
2. jest takie, ok, zostaje uzyte istniejace
metoda open zwraca handler, wiec osohosi?
(w dodatku ten sam dla IE i NS4, przy NS6 jest
pewien _nieistotny_ dla tego problemu niuansik ;))
masz handler, mozesz zamknac
(o ile nie interesuje Cie resize juz obecnego ;)
v.
PS. cokolwiek to jakis empty gif, about:blank czy co tam chcesz ;)))
<html<head
<script
var okno,o
eval(location.search.substr(1))
if(navigator.o)navigator.o.close()
if(navigator.product=='Gecko')
{o=open('about:blank','winame','width=100,height=100');o.close()}
if(okno)
navigator.o=open('okno.html','winame','width='+okno+',height='+okno)
</script
</head<body
<form
<select name=okno
<option value=100okno A 100x100
<option value=200okno B 200x200
</select
<input type=submit value='otworz okno'
</form
</body</html
pewnie... otwierasz okno o tej samej nazwie... (z czymkolwiek)
wnd=open("","nazwa");
wnd.close();
wnd=open("jakiś url","nazwa","wymiary");
Efektem było widoczne szaleństwa odchodzące z okienkami związane z ich
zamykaniem i otwieraniem, ale to można założyć, że jest OK. Niespodziewane
było natomiast, to że nowootwarte było w starych wymiarach. Przyznam się, że
rozwiązałem problem zamykając okno z chwilą zamykania dokumentu (onUnload) w
oknie rodzicu i otwierając je ponownie z chwilą ładowania nowego dokumentu.
Chciałbym jednak mimo wszystko dociec przyczyny takiego dziwnego zachowania
i ewentualnie znalezienie rozwiązania.
Aha. Jeżeli napiszemy procedurkę, która będzie otwierać i zamykać okienko
pomocnicze bez przeładowywania okna rodzica, to mam pełną kontrolę nad
rozmiarami. Np. jeśli zrobimy na stronie 5 przycisków powodujących
wyświetlanie różnych rozmiarów obrazków w oknie pomocniczym, to jego rozmiar
będzie prawidłowo ustawiany. Ciekawe co ?
PS. cokolwiek to jakis empty gif, about:blank czy co tam chcesz ;)))
Niejasna jest dla mnie jedna linia:
eval(location.search.substr(1))
Efektem było widoczne szaleństwa odchodzące z okienkami związane z ich
zamykaniem i otwieraniem, ale to można założyć, że jest OK. Niespodziewane
było natomiast, to że nowootwarte było w starych wymiarach.
Przyznam się, że rozwiązałem problem zamykając okno z chwilą zamykania
oknie rodzicu i otwierając je ponownie z chwilą ładowania nowego
dokumentu.
Chciałbym jednak mimo wszystko dociec przyczyny takiego dziwnego
zachowania
i ewentualnie znalezienie rozwiązania.Aha. Jeżeli napiszemy procedurkę, która będzie otwierać i zamykać okienko
pomocnicze bez przeładowywania okna rodzica, to mam pełną kontrolę nad
rozmiarami. Np. jeśli zrobimy na stronie 5 przycisków powodujących
wyświetlanie różnych rozmiarów obrazków w oknie pomocniczym, to jego
rozmiar
będzie prawidłowo ustawiany. Ciekawe co ?
u mnie to dziala w ie5.5 nn4.7 nn6 - innych nie mam wiec nie sprawdzalem
Yoop
Efektem było widoczne szaleństwa odchodzące z okienkami związane z ich
[...]
rozmiarami. Np. jeśli zrobimy na stronie 5 przycisków powodujących
wyświetlanie różnych rozmiarów obrazków w oknie pomocniczym, to jego
rozmiar
będzie prawidłowo ustawiany. Ciekawe co ?
| PS. cokolwiek to jakis empty gif, about:blank czy co tam chcesz ;)))Uzupełnię tą informację, że cokolwiek to również nic, czyli "". Jednakże
któraś z wersji IE (chyba 4 z kawałkiem)
v.
[...]
oj, kolega chyba "nietutejszy" - moje posty zazwyczaj sa "cross-browser"
dla
wersji =4
i jezeli cos ma nie dzialac, to to zaznaczam (nie dotyczy to opery w
wersji
dowolnej, zmiany jej interfejsu powodujace zmiany numerkow towarzyszacych
nazwie raczej tego nie zmienia ;)))
Pozwole sobie na wtrącenie. Kolega Marek chce rozwiazać szerszy problem,
niż
to, co dość pokretnie teraz tłumaczy.
uruchamia przeglądarkę, otwiera nowe okno metodą window.open (nazwijmy je
'okienko'), po czym przeładowuje zawartość okna głównego (opener). Problem
jest taki: jak dobrać się do 'okienko' (np. jak je zamknąć), gdy strona w
oknie głównym ma juz inną zawartość niż miała podczas uruchamiania
1. strona A - otwiera okienko X o nazwie "X"
2. znajduje sie na niej link do strony B
3. klikamy w link, przechodzimy do _innej_ strony
4. strona B "otwiera" okienko X o nazwie "X"
- tutaj nie ma znaczenia, czy okienko X istnialo,
albo jest tworzone i mamy referencje, albo otrzymujemy
referencje do istniejacego
5. strona B moze juz robic z okienkiem X co chce,
nawet zamknac i otworzyc na nowo
cos nie tak? (IE6 i NS'y, w IE4.x i IE5.x winno byc podobnie,
ale _teraz_ nie mam sposobnosci sprawdzic ;)))
(strony A i B z tej samej loaklizacji, choc i to da sie przeskoczyc ;)))
v.
4. strona B "otwiera" okienko X o nazwie "X"
- tutaj nie ma znaczenia, czy okienko X istnialo,
albo jest tworzone i mamy referencje, albo otrzymujemy
referencje do istniejacego
cos nie tak? (IE6 i NS'y, w IE4.x i IE5.x winno byc podobnie,
ale _teraz_ nie mam sposobnosci sprawdzic ;)))
(strony A i B z tej samej loaklizacji, choc i to da sie przeskoczyc ;)))
[...]
| 4. strona B "otwiera" okienko X o nazwie "X"
| - tutaj nie ma znaczenia, czy okienko X istnialo,
| albo jest tworzone i mamy referencje, albo otrzymujemy
| referencje do istniejacegoCzyli bez otwierania (już otwartego ze strony A) nie da się zamknąć (brak
referencji) ?
ale w _tym_konkretnym_ zastosowaniu, gdy zawartosc
okna i tak ma sie zmienic, jest to jeden z prostszych i niezawodnych
sposobow na zdobycie referencji - a czy zamykac, czy resizowac
...to sprawa programisty ;)) chce zamykac - wolna wola :)
v.
i tak i nie
referencje mozna przekazac na wiele innych sposobow
PS. Pytam z ciekawości... w tej chwili takie rozwiązanie nie jest mi do
niczego potrzebne.
[...]
| i tak i nie
| referencje mozna przekazac na wiele innych sposobowNo właśnie.. jak. Poza query-stringiem nic mi nie przychodzi do głowy.
kilka metod (tak na szybko):
- frameset
- navigator
- zlecenie okienku-dziecku, by "samo" sie przypomnialo we "wlasciwym
momencie"
- pare innych...
v.
_referencje_ przez query-string? nono.... wyzsza szkola jazdy, a mozesz
rozwinac?
(tak z czystej ciekawosci ;)))
kilka metod (tak na szybko):
- frameset
- navigator
- zlecenie okienku-dziecku, by "samo" sie przypomnialo we "wlasciwym
momencie"
- pare innych...
co w tym niespodziewanego ?
Słuchaj - Ty chyba lubisz sam sobie stwarzac problemy?
tekstem - po co Ty chcesz cokolwiek zamykac?
open("url","test","width=100,height=100");
open("url","test","width=200,height=200");
Otworzy okno o rozmiarze 100, a nie 200 i jest to zgodne z dokumentacją JS.
Dlatego nalerzy zamykać okno:
wnd=open("url","test","width=100,height=100");
wnd.close();
open("url","test","width=200,height=200");
Tak czy owak dostałem już odpowiedź od kolegi Bogdana Błaszczaka (na samym
dole drzewka). Interesujące rozwiązanie i działa - warto przeczytać.
Przykład bazuje modelu, który muszę stosować: wybranie obrazka przeładowuje
okno rodzica i zmienia wymiary okna potomnego. Przekazywany jest w tym
przykładzie handler okna poprzez obiekt navigator. Nie wiedziałem, że tak
można robić. Faktycznie ten obiekt w odróżnieniu od document lub window musi
istnieć zawsze. :))
wykorzystasz metode resizeTo
Wow ! Super, dzięki!Niejasna jest dla mnie jedna linia:
| eval(location.search.substr(1))O co tu chodzi ?
BlaTek