Autor Zpráva
Darker
Profil
Máme okno jedna a v něm funkci foo().
function foo(){
  alert(location.href);  //vypise "jedna.html"
}

Máme okno dva, s oknem jedna vzájemně provázané, a provedeme:
okno1.foo();  //vypise "dva.html" 

Vypíše nám to „dva.html“, protože funkce se spustí v okně, ze kterého byla spuštěna.
Jak to udělat aby vypsala "jedna.html" aniž bychom zasahovali do funkce foo()? (a aniž bychom použili něco zlého)
Pokud bychom zasahovat mohli, stačilo by před veškeré proměnné a funkce napsat this (neplatí pro funkce v objektech).
_es
Profil
Darker:
Funkcie pracujú s premennými okna v ktorom boli definované, nie z ktorého boli zavolané.
Ak sa má nejako uplatniť to, akým spôsobom boli zavolané, treba využiť napríklad spomínané this, alebo nejaký argument funkcie.
Witiko
Profil
_es:
definované, nie z ktorého boli zavolané
Právě, ale v tom případě by mělo volání funkce foo navrátit "jedna.html" ať už je metoda volána odkudkoliv. Něco tu smrdí.
Witiko
Profil
Darker:
Pakliže si tohle spustíme tady na fóru:
var a = window.open("?action=userinfo&user=21086");
a.foo = function() {alert(location.href);};
a.onload = function() {a.foo();};

Vyplivne nám a.foo(); adresu aktuálního topicu, ne ?action=userinfo&user=21086, jelikož metoda byla definována ve jmenném prostoru tohoto DOM okna. Funkci foo(); si tedy musí druhé okno buď definovat samo, nebo je třeba jmenný prostor specifikovat přímo v těle funkce:

var a = window.open("?action=userinfo&user=21086");
a.foo = function() {alert(a.location.href);};
a.onload = function() {a.foo();};

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0