ugrás a tartalomhoz

JS futás AJAX-al betöltött HTML-ben

zaphod · 2007. Aug. 2. (Cs), 13.51
Szép napot mindenkinek!

A feladat:
klikkre beteni az oldal egy részébe egy div-et, benne meglehetősen sok (statikus, fix) infot, plus egy flash media playert. Alapvetően ez kód ezt megoldja:

 function mutat(subject)
  {
  if(document.getElementById(subject).style.display=='none') { document.getElementById(subject).style.display='inline'; }
 }
 function rejt(subject)
  {
  if(document.getElementById(subject).style.display=='inline') { document.getElementById(subject).style.display='none'; }
 }
Egy a gondom. Az index.php-ben 4 ilyen kérés lenne, ami hihetetlenül megnöveli a file méretét, szerintem teljesen feleslegesen, mivel minden hidden és csak klikk után inline, ezért ott kell lennie. Szóval erre jó az AJAX.

Sikerült összekalapálni egy loadert, ami igen korrektül megy, az index.php méretet a töredékére csökkent, mindenki boldog. CSAKHOGY.

a loaderrel betöltendő html-ben ugyebár, ott a flash alapú media player, amit egy js irányit, paraméterez, stb. Ez nem működik. Épp úgy viselkedik, mintha ez a sor hiányozna a html-ből:
<script type="text/javascript" src="swfobject.js"></script>
pedig ott van. Ha önnmagában a html-t futtatom, simán megy. Ha beteszem az oldalba és AJAX-al töltöm be, akkor meg nem.

Az AJAX loader kód:

function load(url) {
 var req = null;
 if (window.XMLHttpRequest)
  req = new XMLHttpRequest()

 else
  if (window.ActiveXObject) req = new ActiveXObject("Microsoft.XMLHTTP");

 req.onreadystatechange = function() {
  if (req.readyState == 4)
   if (req.status == 200)
   
    document.getElementById("disk").innerHTML = req.responseText;
   else
    document.getElementById("disk").innerHTML = "AJAX error.";
 } 

 req.open("GET", url, true); 
 req.send(null);
}
a DISK div alapvetően display:none; a html, ami meghívja őket:

<a href="#" style="CURSOR: hand" onclick="mutat('disk'); load('karmolok.html')">
<img src="images/karmolok.png" alt="Karmolok, Harapok - 2004" /><br></a>
természetesen a karmolok.html-ben van a flash player, ami így nem működik,
önállóan viszont igen.
 
1

karmolok

zila · 2007. Aug. 2. (Cs), 14.21
Egyrészt az arcomat, mert nem használod a kódszinezőt, másrészt jó lenne látni mi is van a karmolok.html-ben...
2

re: JS futás AJAX-al betöltött HTML-ben

sly · 2007. Aug. 2. (Cs), 14.27
Válaszd külön a a HTML-t, CSS-t és a JavaScript-et és akkor menni fog. Használj diszkrét JavaScript-et!

Ja és használj kódszínezőt, mert így kevésbé van kedvünk segíteni!
4

ajajj

zaphod · 2007. Aug. 2. (Cs), 15.32
Még nem szóltam itt a weblaboron hozzá semmihez, illetve nem is nagyon érdeklődtem, ezért aztán nem tudom hogy van itt olyan, hogy kódszinező. Sorry, ha gondot okoztam. Hű, de hazudok. egyszer más hozzászóltam, de akkor még nem vol tilyen kódszinezés asszem. legalábbis nem kaptam érte WARN-t :) még1x sorry.

A html, css, js természetesen szét van választva.

a karmolok.html egy igen nagy file sztem nem töltöm be ide, mer kivágtok mint a szél :) semmi extra tartalom nincs benne, csak div-ekben elhelyezett szövegek, linkek, képek, illetve a flash player, ami egy xml playlist-et játszik le.
3

probléma lényege

Marcell · 2007. Aug. 2. (Cs), 14.29
Ha jól sejtem a probléma lényege, hogy nem működik együtt az SWFObject az AJAX hívásokkal. Nekem anno az UFO nem ment vele, volt is egy téma róla a Weblaboron. Mivel nem találtam anno más megoldást, azt választottam, h egyszerűen kihagytam a JS-t és rögtön az <object> tagot írtam a kódba - aktiválni szerencsére nem kellett így sem IE-ben.
5

igen,

zaphod · 2007. Aug. 2. (Cs), 15.35
jól sejted, sőt az ajánlott oldalt elolvasva, már tesztelem is.

10-es, tökéletes, köszönöm. minden megyen.

akkor még egy kérdés, ugyanezzel az AJAX hívással.
Az Opera, konkrétan pont leszarja az egészet, úgy ahogy van.
Klikk, oszt egy tök üres, oldal betöltődik, plusz egy új fül.
FF minden ok. IE6 minden ok.
7

egy tipp

Marcell · 2007. Aug. 2. (Cs), 23.12
Nem sokat tudok mondani, valahol a függvényben hibát észlel és nem fut le rendesen gondolom. Egy tipp: nekem se működött Operában, az volt a probléma, hogy a kérés URL-jét rosszul adtam meg. Legalábbis Opera csak akkor szerette, ha / volt az elején. Tehát nem load('karmolok.html') hanem load('/karmolok.html') - persze én rövid webcímeket használtam az oldalon, úgyh lehet, h csak az játszott közre. Egy próbát azért megér.
8

ez sajna nem nyert

zaphod · 2007. Aug. 3. (P), 17.49
ha /-el írom be a cimet, annyit érek el, hogy AJAX ERROR :( az opera éppúgy nem fut le rendesen. viszont legalább akkora gond a flash lejátszó helyzete. Ha meg van nyitva az oldalon pl, a video-k menüpont, ahol egy szép nagy 300x300px+playlist méretű flash player van és ekkor hivom meg bármelyik html-t, simán az eredeti 300x300 méretű flash player van legfelül. igen gáz ahogy kinéz. A flash-el szinte semmit nem foglalkoztam, ötletem sincs.
9

wmode

Marcell · 2007. Aug. 3. (P), 18.46
wmode=transparent nem segít? Mármint fog, csak állítsd be. :)
6

hogy zárom be?

zaphod · 2007. Aug. 2. (Cs), 16.12
Miután a legegyszerűbb módon (<embed>) sikerült a tanács alapján megoldani a problémát, igazából maradt a bezárás. Oké, hogy elrejtem a div-et, amiben van a html, de attól még ha a user épp lejátszik egy nótát a listából, az nem fog elhallgatni (IE alatt) Nincs valami mód rá, hogy bezárjam valahogy és a lejátszás is megálljon? Illetve miért nem fut az egész kód OPERA alatt? Ja, és egy flash-es kérdés. Hogyan lehet az swf-et nem a létező legfelsőbb rétegbe tenni, hogy más is látszódjon tőle? Itt konkrétan arra gondolok, hogy ez a player az oldal egyéb helyein is használatban van (klippek, stb) ha épp az a menü az aktiv és ott nyitja meg a user az AJAX-os betöltésű karmolok.html-t, akkor szépen ott virít legfelül az eredeti menüpont lejátszója, ami igencsak csúnya.
Feltöltöm és itt elérhető amiről beszélek.
10

JW Player

Marcell · 2007. Aug. 3. (P), 18.59
Kicsit jobban megnéztem az oldalt és látom JW MP3 Playert használsz rajta. Ennek van egy halom utasítása, amit JS-ből is elérsz - úgyhogy ha IE-ből nézik, egyszerűen hívd meg sendEvent('stop')-ot.

A másik problémádra sztem megoldást fog adni a wmode=transparent, viszont akkor a videóknál nem fogod tudni használni a teljes képernyős üzemmódot. Nem tudom miért, de elromlik... még nem jöttem rá, hogy lehet kicselezni - pedig próbáltam már DOM manipulációt is, de azzal sem ment. Úgyhogy ha valaki tudja, h lehet mindkettőt egyszere megvalósítani, szóljon nekem is! :)