| Autor | Zpráva | ||
|---|---|---|---|
| Darker Profil |
#1 · Zasláno: 8. 7. 2011, 18:32:42 · Upravil/a: Darker
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 |
#2 · Zasláno: 8. 7. 2011, 18:42:02
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 |
#3 · Zasláno: 9. 7. 2011, 13:25:12
_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 |
#4 · Zasláno: 10. 7. 2011, 13:52:31 · Upravil/a: Witiko
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();}; |
||
|
Časová prodleva: 15 let
|
|||
0