SWFObject wywołany bez wskazania DIV

0

Witam,

Dziś spotkałem się z zagadnieniem, które wydawać by się mogło jest trywialnym, ale na które rozwiązania nie mogę znaleźć. Otóż potrzebuję umieścić na stronie element Flash wykorzystując SWFObject w miejscu w którym wywołuje metodę embedSWF, ale bez wskazania w jakim DIV ten Flash ma zostać osadzony.

Chodzi o to by nie interesowało mnie w jaki sposób ten Flash zostanie osadzony na stronie, czy będzie wewnątrz elementu DIV czy może jakiegokolwiek innego jest dla mnie bez różnicy.

Ze względu na to, że nie lubię wyważać otwartych drzwi zwracam się do Was z pytaniem czy może z czymś podobnym się już spotkaliście?

Pozdrawiam,
Grzegorz

0

hmm,
zawsze możesz osadzać "normalnie":

<object type="application/x-shockwave-flash" data="/swf/video_629x229.swf" width="629" height="229">
<param name="movie" value="/swf/video_629x229.swf" />
<param name="wmode" value="transparent" />
Do wyświetlenia tego elementu potrzebujesz zainstalowanej wtyczki Adobe Flash Player.
</object>

a potem w jquery wybierac wszystkie objecty flashowe, wywalić je i zamiast nich wstawic kontener (div), a potem po kolei wywolywac metode swfobjecta z parametrami wczesniej wybranymi z elementow object

0

@grzeswisniewski:
Wiesz, pal sześć wstawianie Flasha "w bliżej nieokreślone miejsce". To faktycznie byłoby trochę nieprzewidywalne i bez sensu. Tym bardziej, że o ile pamiętam swfobject praktycznie USUWA wszystko co jest w elemencie, którego id przekazujesz do embedSWF (bo w tym elemencie powinna się znajdować "zawartość alternatywna" -- wyświetlana, gdy Flash jest niedostępny).

Ale rozumiem też o co Tobie może chodzić. Możesz chcieć wstawić na stronę banner i w sumie nie obchodzi Cię, gdzie w kodzie zostanie to dodane i nie chcesz wstawiać w kod pustego div-a (lub innego elementu, to nie musi być przecież div!) którego ID przekazywałbyś do embedSWF.

Wiesz co mógłbyś zrobić? W parę linijek JavaScriptu mógłbyś dodać na końcu body pusty element. I go przekazać do embedSWF -- niech sobie tam wstawi tego Flasha.

Jednak do embedSWF nie możesz przekazać referencji do elementu, tylko koniecznie musi być to string z ID elementu. Jest to prawdopodobnie błąd projektowy autorów modułu embedSWF. Musisz stworzyć element -- a więc masz do niego referencję -- ale następnie musisz dać mu jakieś sztuczne, głupie ID tylko po to, żeby przekazać do embedSWF to ID.

Są dwie opcje. Pierwsza jest taka na pałę: wymyśl jakieś dziwne id, zaczynające się od "" czy coś, i wstaw je na stałe. Czyli tworzysz element, dajesz mu ID "nazwaMojegoSkryptu_flashContainer", wstawiasz ten element na koniec body i przekazujesz embedSWF id "__nazwaMojegoSkryptu_flashContainer".

Oczywiście, gdy dodasz np. dwa takie skrypty na stronie (bo będą dwa bannery), to to się wysypie, bo ID masz wstawione na stałe.

Dlatego ja czegoś takiego unikam i piszę sobie funkcję "createUniqueID(prefix)". Działa ona tak, że jeśli w dokumencie nie ma elementu o ID prefix, to zwraca po prostu prefix. Jeśli w dokumencie jest taki element, to funkcja sprawdza, czy istnieje element prefix_0. Jeśli istnieje, to sprawdza prefix_1 i tak w kółko, aż znajdzie unikatowe ID zaczynające się od ciągu przekazanego w parametrze prefix.

Wtedy mogę nadać mojemu dynamicznie utworzonemu elementowi ID uzyskane tak: createUniqueID('nazwaMojegoSkryptu_flashContainer'). Taki skrypt jest kuloodporny. Gdy ktoś doda kilka bannerów, to pierwszy otrzyma ID '__nazwaMojegoSkryptu_flashContainer', drugi 'nazwaMojegoSkryptu_flashContainer_0', trzeci '__nazwaMojegoSkryptu_flashContainer_1' i tak dalej. Oczywiście, gdy ktoś zupełnie przypadkowo będzie miał na stronie element o takim ID, jakie my chcieliśmy nadać, to to nadal zadziała -- doda sobie po prostu kolejną cyferkę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0