Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [FLASH] PHP, FlashVars i Firefox
Forum PHP.pl > Forum > Po stronie przeglądarki
pawlikwn
Witam,

trochę dziwny problem, ale wciąż nie mogę znaleźć rozwiązania. Mianowicie chodzi o zmienne flashVars przekazywane do galerii flash. W zależności od strony, przekazuję zmienną z nazwą galerii. Wszystko jest spoko w operze i w IE, natomiast FF przechwytuje zmienną, ale nie podmienia jej przy zmianie strony. Dopiero po odświeżeniu z pominięciem Cache'a jest w stanie ją wczytać.

Moje pomysły:
1. Wymusić nie cache'owanie
  1. <meta http-equiv="Pragma" content="no-cache" />
  2. <meta http-equiv="expires" content="-1" />
  3.  
  4. NIE ZADZIAŁAŁO


2. Zrobić to samo nagłówkami w PHP:
  1.  
  2. header("Cache-Control: no-cache, must-revalidate");
  3. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); //Dowolna data wsteczna
  4.  
  5. NIE ZADZIAŁAŁO


3. Strzelić z nerwów w klawiaturę: - nie pomogło

Macie jakieś sugestie questionmark.gif

Kod flasha:
{tpl:flash_gal_category} - tutaj jest nazwa zmiennej

  1. <div id="flashdiv">
  2. <script language="JavaScript" type="text/javascript">
  3. AC_FL_RunContent(
  4. 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0',
  5. 'width', '703',
  6. 'height', '355',
  7. 'src', 'gallery',
  8. 'quality', 'high',
  9. 'pluginspage', 'http://www.adobe.com/go/getflashplayer',
  10. 'align', 'middle',
  11. 'play', 'true',
  12. 'loop', 'true',
  13. 'FlashVars', 'category={tpl:flash_gal_category}',
  14. 'scale', 'showall',
  15. 'wmode', 'transparent',
  16. 'devicefont', 'false',
  17. 'id', 'gallery',
  18. 'bgcolor', '#251c1c',
  19. 'name', 'gallery',
  20. 'menu', 'true',
  21. 'allowFullScreen', 'false',
  22. 'allowScriptAccess','sameDomain',
  23. 'movie', 'gallery',
  24. 'salign', ''
  25. ); //end AC code
  26. <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="703" height="355" id="gallery" align="middle">
  27. <param name="allowScriptAccess" value="sameDomain" />
  28. <param name="allowFullScreen" value="false" />
  29. <param name="FlashVars" value="category={tpl:flash_gal_category}" />
  30. <param name="movie" value="gallery.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#251c1c" />
  31. <embed src="gallery.swf" FlashVars="category={tpl:flash_gal_category}" quality="high" bgcolor="#251c1c" width="703" height="355" name="gallery" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
  32. </object>
  33.  
  34. </div>
varez
nagłówki http (czy te "symulowane" w HTML, czy te realne) nijak się mają do cache`u FLASH`a.
Nie jestem w stanie Ci pomoc, lecz chcialem zwrocic na to uwage..

w sumie nie siedzialem gleboko we flashu, ale czy toto nie potrafilo by odczytac zmiennej przekazanej GET`em? tj.
  1. <embed src="gallery.swf?category={tpl:flash_gal_category}" />


Poza tym ja zawsze używam skryptu SWFObject do osadzania Flasha - pięknie działa, i nigdy nie miałem problemów z FlashVars - a sam skrypt ma tez pare innych zalet winksmiley.jpg

Ponieważ czasem SWFObject lubi tez szalec - zwlaszcza ze w necie sa rozne jego wersje - czasem inne niz są podpisane (męczyłem sie z tym dlaczego nie działa w/g nowej wersji, a po godzinie odkrylem ze jednak pobrała mi sie stara:/) to masz tu gotowy kod (wszystko w HEAD):
  1. <script type="text/javascript" src="{$_MAIN}js/swfobject.js"></script>
  2. <script type="text/javascript">
  3. var flashvars = {};
  4. flashvars.czasPokazywania = 3;
  5. var params = {};
  6. params.wmode = "opaque"; // tu mozliwe ze chcesz "transparent"
  7. var attributes = {};
  8. attributes.id = "flash";
  9. swfobject.embedSWF("/swf/middlepics.swf", "flash", "741", "242", "9.0.0", "/swf/expressInstall.swf", flashvars, params, attributes);


Nie trzeba stosowac sztuczek na załadowanie DOM - swfobject z tego co widze ma to wbudowane.
Przygotowujesz sobie DIV`a z okreslonym id (w przykladzie id="flash"), stylujesz go na wymiary takie jak flash (w przykladzie 741x242) ustawiasz wszystko i gra smile.gif


PS. A jak nie zadziala to zobacz czy to moze nie problem tylko z Twoim FF.
pawlikwn
Dzięki varez za odpowiedz winksmiley.jpg

Co do swfObject - rzeczywiście bardzo fajny skrypt. Wkłada content zawsze poprawnie (bynajmniej na moich testowych przeglądarkach).
Nie rozwiązał on jednak problemu.

Za to przynajmniej dzięki niemu namierzyłem gdzie jest błąd:
  1. Dokładnie tutaj: params.wmode = "transparent";


Mianowicie chodzi o to, że gdy ustawię jako "window" wszystko jest w porządku, dla "opaque" i "transparent" nie widać zmiany. Co więcej, mam wrażenie, że problem nie tkwi w samym pliku flash i przekazywaniu zmiennej przez flashVars (przypomnę, że IE, Opera, Chrome, Safari radzą sobie z tym znakomicie) lecz gdzieś w renderowaniu flasha przez FF. Tak jakby nowy obiekt był przezroczysty...
Parametr transparent muszę mieć, gdyż mam drop down menu nad zawartością...

jakieś pomysły questionmark.gif Może da się inaczej zrobić, żeby menu było nad zawartością flash, to by sie rozwiązał problem.

Pozdrawiam
varez
o ile mi wiadomo to flash jest zawsze najbardziej "na gorze"..
a sprawdzales czy na innym FF tez sa problemy?
pawlikwn
Cytat(varez @ 23.11.2009, 22:58:45 ) *
o ile mi wiadomo to flash jest zawsze najbardziej "na gorze"..


To zależy właśnie od parametru wmode: jeśli jest window to flash jest renderowany zewnętrznie względem przeglądarki. Umieszczanie elementów JS, albo DHTML jest nad nim wtedy nie możliwe. Jeśli ustawisz opaque, bądź transparent - renderowaniem zajmuje się przeglądarka i wówczas CSS, DHTML, JS mogą wchodzić w interakcję z flashem. Dlatego w przypadku dropdown menu ustawia się parametr wmode=opaque, lub wmode=transparent. Cytat:
Cytat
Window Mode (wmode) - What's It For?
There are three window modes. Windowless mode allows you to take advantage of the transparent movie, absolute positioning, and layering capabilities available in the browser. They are controlled with the wmode parameter in the object tag. The default mode is available by either choosing not to specify any wmode, or by using wmode="window". We'll look at Macromedia's explanation of the three modes and then we'll explore them a bit further individually.

  • Window: Use the Window value to play a Flash Player movie in its own rectangular window on a web page. This is the default value for wmode and it works the way the classic Flash Player works. This normally provides the fastest animation performance.
  • Opaque: By using the Opaque value you can use JavaScript to move or resize movies that don't need a transparent background. Opaque mode makes the movie hide everything behind it on the page. Additionally, opaque mode moves elements behind Flash movies (for example, with dynamic HTML) to prevent them from showing through.
  • Transparent: Transparent mode allows the background of the HTML page, or the DHTML layer underneath the Flash movie or layer, to show through all the transparent portions of the movie. This allows you to overlap the movie with other elements of the HTML page. Animation performance might be slower when you use this value.

Więcej na tej stronie: http://www.communitymx.com/content/article.cfm?cid=e5141



Cytat(varez @ 23.11.2009, 22:58:45 ) *
a sprawdzales czy na innym FF tez sa problemy?


Niestety jest to samo sad.gif

Pośrednim rozwiązaniem problemu było dodanie zmiennej losowej jako get w URLu określającym adres obiektu swf. Dzięki temu zadziałał no-cache przeglądarki i za każdym razem .swf wczytuje się na nowo. Super, tylko że w przypadku większych plików .swf metoda kosztowna transferowo...
Ja swojego .swf a musiałem właśnie przez to zoptymailizować i dla ciekawostki powiem, że usunięcie z loadera dynamicznego pola tekstowego pokazującego ilość załadowanych danych w procentach zaoszczędziło mi 80 KB exclamation.gif! Tego też nie rozumiem, bo w polu embedowałem tylko 11 znaków (0-9 i %).

Rozwiązanie:
  1. var flashvars = {category: "xxxx"};
  2. var params = {};
  3. var attributes = {};
  4. params.wmode = "transparent";
  5. swfobject.embedSWF("gallery_final.swf?category=xxxx&rd=12345678", "flashdiv", "703", "350", "10.0.0","expressInstall.swf", flashvars,params,attributes);
  6.  
  7. Gdzie wartość 12345678 może być generowana w php np. $rand = time();
  8.  
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.