ugrás a tartalomhoz

Html a htmlben és a javascript

therest · 2012. Jan. 23. (H), 14.40
A következőt kéne megvalósítanom:
Teljes funkcionalitású html tartalmat kellene egy másik domainen elhelyezkedő oldalon belül megjelenítenem, és a két oldal közötti javascript kommunikációt megvalósítani. Tehát beágyazott részből is el lehessen érni a "külső" részek függvényeit, illetve a tartalmazó részekből is hívhatóak legyenek a beágyazott részek egyes funkciói.
Megvalósítható ez valahogy? Milyen módszerekkel? Mik a korlátok ha vannak. Nekem iframe ugrott be, amiről mindig az jut eszembe, hogy hány helyen szapulják, de közben mondjuk a Facebook is épít rá. Találkoztam olyan beépítéssel is, hogy a távoli html tartalmat object-ként emelték be, ilyenkor elérhető-e valamilyen módon a beágyazott tartalom JS tartalma?
 
1

Rengeteg módszer

Poetro · 2012. Jan. 23. (H), 15.29
Rengeteg módszer létezik a widgetek építésére, és azok kommunikálására. A legegyszerűbb, hogy a harmadik fél oldalába beszúrja a te JavaScript kódodat, ami ezek után JSONP-n keresztül kommunikál a te oldaladdal, és DOM manipulációval szúrja be a tartalmat. Amennyiben elég statikus a tartalom, akkor magában a beszúrt JavaScript fájlban is lehet maga a tartalom, bár ekkor a böngésző gyorsítótárazása miatt nehéz lesz a tartalmat frissíteni. Ha azonban komplexebb a tartalom, és a harmadik fél nem szeretné, hogy esetleg CSS miatt módosulna az oldala, akkor jöhet megoldásként az iframe. Ekkor viszont meg kell küzdeni az iframe és a harmadik fél oldala közötti kommunikációval, még csak olyan kis részletek miatt is, mint az iframe átméretezése a benne levő tartalom miatt. Mivel valahogy a harmadik fél oldalában levő szkript tudtára kell juttatnod hogy megváltozott az iframe-ben levő tartalom magassága például.

Erre a modern böngészőkben létezik a postMessage metódus, amivel a két "ablak" között lehet adatokat küldözgetni, legjobb, ha String formájában ugyanis egyéb objektumok forgalmazása nem minden böngészőben támogatott. A String formát legjobb, ha JSON-ban valósítja meg az ember, mert abba bonyolultabb adatokat is be lehet csomagolni, illetve onnan kicsomagolni. Amennyiben 9-esnél régebbi IE-t is támogatni akarsz, akkor meg kell valósítani a postMessage emulációt azokban a böngészőkben, amelyek ezt nem támogatják. Ezt az iframe name tulajdonságának illetve URL-jének módosításával lehet elérni, illetve léteznek kész könyvtárak is, minta amilyen a Josh Fraser féle.

Amennyiben lehetőséged van egy általad írt fájlt a célszerverre juttatni (azaz megegyeztél a harmadik féllel, hogy hosztoljon neked egy HTML fájlt, amit te írtál), akkor még összetettebb kommunikációt is megvalósíthatsz. Ezt úgy kell elképzelni, hogy a te iframe-edbe elhelyezed a harmadik fél oldalán levő HTML-t, és azt az iframe-et méretezed át, és annak az URL-jét módosítva tudsz kommunikálni a harmadik féllel. Valamint a harmadik fél oldalában elhelyezel még egy iframe-et, ami a te domain-edről jön, és ekkor annak az átméretezésével, és URL-jének módosításával tud kommunikálni a harmadik fél a te oldaladdal. A cross domain kommunikációról van egy részletes cikk, érdemes elolvasni.
2

Ezer hála és köszönet! Már

therest · 2012. Jan. 23. (H), 16.06
Ezer hála és köszönet! Már többször leírtam, hogy mennyire hasznos a Weblabor, de most külön Poetronak egy nagy kösz a sok segítségért! Bőséges infó az induláshoz.

Amire hajtok a dologgal, az egy szolgáltatás amit az oldalba tudnak a partnerek illeszteni. A betöltött tartalom minden partnernél nagyjából ugyan az, de a stílus a partner környezetéhez illeszkedik.
Az terület amin a beágyazott tartalom elhelyezkedik fix méretű lesz (partnerenként más lehet), az esetlegesen "kilógó" tartalmakat jquery alapú scroll-al fogom megoldani.
Egyelőre úgy fest, hogy ie7ig támogatnom kell. :(