külső elem elérése iframe-ből

Sziasztok!

Hogyan tudnék egy "button" elemet iframe-ből a szülő, frame-ben? Konkrétan az iframe-be betöltött dokumentumból akarok kiadni egy parancsot, amit a szülő frame-ben lévő gombot tiltja le. a ".diabled=true" megy. Az a bajom, hogy olyan példákat találtam csak, amikben megnevezik a frameket ("top.frames['fameneve'].getElementById('gomb').disabled=true;") ..... de a "nagy-framenak" mi a neve?

Hozzászólások

window.parent.document.getElementById('gomb').disabled=true;

Nem csak megnyitott ablakokra, hanem frameset-re, iframe-re is működik.

Köszi mindenkinek :)
Annyiban módosult a koncepció, hogy most egy megnyitott window-ból kellene egy másik megnyitott window-ba betöltött oldalon lévő elemet elérni.

Van egy window, melyben van egy javascipt-es WYSIWYG szövegszerkesztő, melynek alapeleme egy textarea.
Ebből a window-ból egy button segítségével nyílik újabb window, mely egy ajax-os fájlmanagert nyit meg.


< input type=\"button\" value=\"Képek beszúrása\" onClick=\"window.open('ajaxfilemanager/ajaxfilemanager.php','mywindow_kep','width=900,height=600,top=100,screenX=0,screenY=100');\">

A fájlmanager meg tudja nyitni a képeket lightboxba. Az a cél, hogy a lightbox-on belül egy linkre kattintva beszúrodjon a képnek az url-jét tartalmazó sztring az őt megnyitó (WYSIWYG-es szövegszerkesztős) ablakban található textarea-ba.


function beszuras()
{
	global_url;
	window.parent.getElementById("szoveg").value += "<a href='"+global_url+"' target='_blank'><img src='"+global_url+"' width='50 px'></a>";
}

Szerintem nem jól értelmeztem az iránymutatást, mert továbbra sem akarja a sztringet beilleszteni :(

Ez nagyon beluska-kod.

Melyik WYSIWYG editor?

Szerintem a textarea tipusnak nem value-ja van, hanem innerHTML-je, es a getElementById az nem egy window fuggveny, hanem document fuggveny, tehat:


window.parent.document.getElementById("szoveg").innerHTML += "< a href='"+global_url+"' target='_blank'>< img src='"+global_url....>

Mondjuk lehet value-val is mukodik, de ettol meg nem tul modern a kod...

Van am javascript debugger, firefox alatt firebug, chrome alatt meg csak be kell kapcsolni - sot, opera-ban is van valami. Lehet szepen breakpointot allitani es dob syntax errort a megfelelo sorban...

nem is volt rá sok időm összedobni ezt a tákolmányt :D
Wizz WYSIWYG editornak egy 2006-os verziója. Csak be kell linkelni a .js fájlt és egy függvénynek meg kell adni paraméterbe a textarea azonosítóját.

Köszi, ki fogom próbálni :) Nemrég kezdtem csak bele a kliens-oldali webprogramozásba és ez tőlem nagyon távol áll. amit lehetett, megoldottam PHP-val és igazából eddig csak apróságokhoz használtam JS-t, nem is merültem bele igazán sosem, csak mostanában, amikor már AJAX-ot is kellett használnom.

Szomtam is használni a javascript debugger-t, de ablakokra/ablakok között sajnos nem működik :(

Jo,akkor ismerkedj::

http://www.youtube.com/watch?v=v2ifWcnQs6M&feature=youtube_gdata_player

(Ez alt. kotelezo mindenkinek, aki JS-sel foglalkozik tobb cegnel, popcorn-sessionnek hivjuk)

Ott vannak mellette a folytatasai is (An Inconvenient API - The Theory of DOM, Advanced JavaScript, aztan a Crockford on JavaScript), de a hozzaallast allitjuk be vele inkabb.

Kell majd neked egy browser lib is, mert az IE meg a firefox csak papiron kompatibilis; ez az uj divat szerint a jQuery, de a legtobb jQuery demo-kod valojaban nem megkulonboztetheto az ocsmany hekktol, igy valami tisztabbat (pl. YUI) kene nezned.

A 2006-os verzio pedig felvilagosodas elotti, valoszinuleg sok baja van (2006-ban ez a bizonyos Crockford inditotta el a modern javascript felfogast, amely egy tisztabb kodstilust eredmenyezett, ennek eredmenye a jQuery is)

Erdemes megtanulni, mert egy csomo dolog fut ezzel, meg sokszor egyszerubb es tisztabb megirni egy intelligens kliensprogramot ami a bongeszoben fut, semmint trukkozni a browserrel.

megnéztem, a firefox hibakonzolja működik ablakora is.

"Hiba: window.parent.document.getElementById("szoveg") is null
Forrásfájl: ajaxfilemanager/jscripts/thickbox.js
Sor: 328"

--> window.parent.document.getElementById("szoveg").value += "< a href='"+global_url+"' target='_blank'>< img src='"+global_url+"' width='50 px'>< /a>";

Lehet, hogy a szülő ablakot nem ismeri fel?

Lebreakpointolod, fogod a konzolt, beirod, hogy window.parent. vagy adsz ra egy watch-ot. A firebug asszem nem merge-eli az ososztalyokat, szoval ha valamilyen fuggvenynevet nem latsz a listaban, keress a prototype, vagy __proto__ tulajdonsagokra.

Ha null-t kaptal vissza a getElementById-re, az azt jelenti, hogy nincs szoveg id-ju elem a parent documentben. Meg kell nezni, hogy sajat magat latja-e parent window-nak, ill. hogy a parent window-ban van-e szoveg nevu id futasidoben (HTML ful a firebugban)

találtam a Google Könyvekben egy Javascript Bible c. könyvet.
Találtam benne egy példakódot is egy opener nevű függvényről. Meg is írtam belőle a saját kis egyszerű kódomat.


< html>
< head>
< script type="text/javascript">
	function beilleszt()
	{
		document.getElementById("szoveg").innerHTML += "valami";
	}
	
	function ablak_creat()
	{
		var ablak;
		ablak = window.open('2.htm','ablak1','width=900,height=600,top=100,screenX=0,screenY=100');
		ablak.focus();
	}
< /script>
< /head>
< body>
< textarea id="szoveg"></textarea>
< input type="button" value="Izé" onClick="ablak_creat()">
< input type="button" value="Beillesztés" onClick="beilleszt()">
< /body>
< /html>

és a betöltött oldal kódját is:


< html>
< head>
< script type="text/javascript">
	function beszuras()
	{
		self.opener.document.getElementById("szoveg").innerHTML += "valami";
	}
< /script>
< /head>
< body>
	<input type="button" value="Izé2" onClick="beszuras()">
< /body>
< /html>

az a gond, hogy ez Mozillában működik, de Chrome-ban már nem működik. Van valami univerzálisabb megoldás? a jQuery-ben van ilyen, hogy szülőablak-elérés? :)

szerk.: a windows-os Safariban is működik.

Akkor hasznald ezt... https://developer.mozilla.org/en/DOM/window.opener

(self helyett window)

A jQuery nem csinal csodat, a jQuery annyit csinal, hogy nem kell menkuhosszu query-ket kezzel irni (document.getElementById('tablazat').getElementsByTagname('td')[0].firstChild es hasonlok), meg elfedi a browser-inkompatibilitasokat (pl. az addEventListener (standard) es attachEvent (IE) kozti "apro" kulonbsegeket), de csodat nem tesz, es foleg nem lesz tole rendezettebb a kodod.

Alapvetoen a problemat ugy szokas kikerulni - es ez a felhasznalonak is jobb altalaban - hogy modalis virtualis ablakokat hasznalunk. A modalis virtualis ablak egy abszolut-pozicionalt div, aminek magas a z-index CSS eleme, es igy eltakarja a tobbi elemet. Attol modalis, hogy a tobbihez nem lehet hozzaferni, es attol virtualis, hogy nem igazi ablak. Vagy eleve letre van hozva, csak display:hide a css-e, vagy keresre hozzuk letre. A bezarasa hide-dal vagy DOM-bol kivetellel tortenik.

Tipikus korai (Prototype) megvalositasa ez: http://prototype-window.xilinus.com/
YUI-s megoldas: http://925html.com/files/overlay-extras/ (kod: http://yuilibrary.com/gallery/show/overlay-extras )
DOJO-s megoldas: http://dojotoolkit.org/reference-guide/dijit/Dialog.html
jQuery UI: http://jqueryui.com/demos/dialog/#modal
ExtJS 4 megoldas: http://dev.sencha.com/deploy/ext-4.0.7-gpl/examples/message-box/msg-box…

Szoval igy. Es akkor nincs parent window para.

köszi, azóta már valahogy Chrome-ban is életre kelt a kicsike :) Most azzal szívok, hogy ha a Wyzz-es textarea-ba billesztem a sztringet a a Wyzz insertHTML függvényével, akkor csak Mozilla alatt képes befrissíteni annak a tartalmát.... tényleg kész agyrém a böngészők közötti inkompatibilitás.. komolyan mondom, száműzni kellene a böngészők készítőit egy lakatlan szigetre....

benéztem azt :D az openwebware.com-hoz volt írva a 2006 :D 2009 volt a program neve mellé írva. kissé fáradt voltam múltkor és most sem vagyok éppen kipihent :D ja, most már mindhárom böngészőben megy rendesen az editor tartalmának a frissítése :D hehe, tényleg a tököm kivan néha a böngészőkkel :D

Szerintem a 2009 is regen volt mar. Ha nekiszaladsz, es lecsereled az editort egy modernebbre, tamogatottabbra, akkor lehet, hogy tobb idot tudsz a csaladoddal tolteni. Peldaul egy CKEditor megfelelo lehet, integralt fajlkezelessel bir, amit nem neked kell megirni, keszen, ajandekba kapod.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal 

már csak arra nem jövök rá, hogy xmlhttprequesttel betöltött oldalon elindítani egy szkriptett a betöltéskor?
próbáltam a < body onload="függvény()"> -t, meg a headben a window.onload=function() { függvény(); } -t is.

szerk.: az ajaxos oldalbetöltést egy saját függvénnyel oldom meg:


loadTo('valami.php','cél_DIV_neve');

ezt a függvényt próbálom meghívni betöltéskor azon az oldalon, melyet szintén ezzel a függvénnyel hívok meg.

mert egy documentben egy body van, ami mar lefutott.

AJAX-szal ne akarj full HTML-t betolteni. Amugy lehet irni kezelofuggvenyeket, plane ha mar irtal is, akkor pontosan tudod, mikor toltodott be, nem igazan ertem, hogy miert nem futtatsz le egy mar letezo javascriptet a beillesztes utan.