Autor Zpráva
Gappa
Profil
Zdravím/ahoj,

rád bych požádal o pomoc při řešení zajímavého problému, který se vyskytuje ve všech mnou testovaných verzí IE (6/7/8) a tedy bude souviset asi s Flash Pluginem jako takovým/vytvořeným swf.

Popis problému:
- mám flash, který přehrává video (mp4/flv), prakticky to je jenom plocha flashe, bez ovládacích prvků (ty se později dodělají pomocí html/css a celé se to ovládá přes js)
- flash normálně funguje, pokud při načtení stránky nemá žádný z jeho rodičů nastaveno display: none
- pokud se flash načte jako skrytý a pak se zobrazí, není vidět žádný obraz a hraje pouze zvuk (testováno na více videích)

Co jsem zkoušel/poznatky:
- vložit flash jak pomocí embedu, tak DGX způsobu - nemá vliv
- jiný flash přehrávač tento problém nemá
- pokud skrytému parent elementu vypnu display: none přes IE Developer Toolbar, tak obraz/video je vidět bez problémů
- přehrávač je v podstatě jen .as soubor, ten si vše potřebné vytvoří

Problém tedy bude někde nejspíše ve zdrojáku toho flashe v kombinaci s activex pluginem pro IE. Možná bude stačit něco nastavit při publikaci flashe, ale flashař zrovna nejsem a tak s tím nemám téměř žádné zkušenosti.

Rád bych dal odkaz přímo na ukázku, ale můžu dávkovat informace pouze po málu a rozhodování není na mně (je to pro jeden projekt). Další info, pokud bude pro vyřešení nutné, se snad bude dát poskytnout.

Díky za pochopení a případné rady, ačkoliv házím případným řešitelům tak trochu klacky pod nohy.
Gappa
Profil
Podařilo se mi zjistit, kde je problém:
- ve chvíli inicializace přehrávače v okamžiku, kdy se videu nastavuje šířka a výška, jsou atributy stage.stageWidth a stage.stageHeight rovny nule.
- videu se tedy nastaví nulové rozměry, tudíž není vidět a hraje jen zvuk
- googlil jsem tedy spojení "stage.stageWidth 0" a to mi dalo nějaké výsledky (rozdílné), funkční pro můj případ byl až následující způsob inicializace.

Nejdříve jen přidat event a nic neinicializovat:
addEventListener(Event.ENTER_FRAME, onEnterFrame);

Až na základě eventu něco provést:
private function onEnterFrame(e:Event)
      {
          if (stage.stageWidth > 0 && stage.stageHeight > 0) {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
            initializePlayer();
          }
      }


Veškerá inicializace tedy proběhne až ve chvíli, kdy jsou známy rozměry stage. Problém s nulovými rozměry stage nebude asi jen čistě problém IE, popisovali tam i FF/Chrome a ještě to prý bývá závislé na tom, jestli se flash stahuje, nebo jestli se jen vezme z cache.

Snad toto někomu pomůže, mně to stálo pár nervů :)

Vaše odpověď

Mohlo by se hodit

Nezapomeňte na odkaz na živou ukázku problému.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: