Autor Zpráva
kubakoumak
Profil
Ahoj,

měl bych jeden malý dotaz. Jde kterymkoliv způsobem zjistit, jestli má uživatel flashplayer? Dost by se mi to hodilo. Možná by to šlo v js, ale nejsem si jistý. Tady jsem našel toto, ale potřeboval bych to nějak rozvinout. Zkuste mi nějak polopatě ukázat skript, kterej v případě, že flash není, ukáže něco jiného než když je.
Dík za odpověď

//EDIT:
<script>alert(window.navigator.mimeTypes.item(0).description);
</script>



Možná by fachčilo toto. V chromu mi to vyplivne Adobe flash player - to už by na podmínku šlo :-), ale firefox nic neřiká a IE mi hlásí chybu na 1. řádku. Nevíte co s tím?
DoubleThink
Profil *
Je to trochu komplikovanější – tedy pokud to má fungovat všude. Ideálně sáhni po hotovém scriptu od Adobe.
Adobe Devnet: Detecting Flash Player versions and embedding SWF files with SWFObject 2
Chamurappi
Profil
Reaguji na kubukoumaka:
var mameFlash = window.ActiveXObject ? new ActiveXObject("ShockwaveFlash.ShockwaveFlash") : navigator.plugins["Shockwave Flash"];



Reaguji na DoubleThinka:
Je to trochu komplikovanější – tedy pokud to má fungovat všude.
Vážně?
kubakoumak
Profil
Promiň za mojí nechápavost. Moc dobře nechápu, co tím myslíš :-/.
Chrome hlásí: [object DOMPlugin]
FF: [object Plugin]
IE: [object]

To asi nemá být on, že jo? :-(
DoubleThink
Profil *
Chamurappi:
Vážně?
Ano. Skript [#3] je v praxi na nic. K nějakému relevantnímu rozhodnutí je třeba ověřit i číslo verze playeru, což, vzhledem k nejednotné implementaci, ten strom podmínek trochu rozšiřuje*.
Chamurappi
Profil
Reaguji na kubukoumaka:
Proměnnou mameFlash si můžeš dát do ifu…
Ale udělal jsem chybu, zapomněl jsem, že v Exploreru vyhodí pokus o vytvoření neexistujícího objektu výjimku — ta se ještě musí odchytit.


Reaguji na DoubleThinka:
V tom případě takhle:
function verzeFlashe()
{
  try
  {
    var v;
    if(typeof ActiveXObject != "undefined")
      v = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable('$version');
    else
      v = navigator.plugins["Shockwave Flash"].description;
    var m = v.match(/^[^0-9]*([0-9]*)[\.,]([0-9]*)[^0-9]*([0-9]*).*$/);
    return [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10) || 0];
  }
  catch(exc)
  {
    return [0, 0, 0];
  }
}
kubakoumak
Profil
Aha....

Teď opravdu nevim co s tim. Mohl bys mi tu funkci trochu popsat? Sorry, asi sem úplně dutej.
Chamurappi
Profil
Reaguji na kubukoumaka:
Samotná detekce flashe po opravě chyby:
var mameFlash = false;
try {
  mameFlash = window.ActiveXObject ? new ActiveXObject("ShockwaveFlash.ShockwaveFlash") : navigator.plugins["Shockwave Flash"];
} catch(exc){ }

Použití:
if(mameFlash)
{
  alert("Máme Flash! To se máme.");
}
else
{
  alert("Nemáme Flash!");
}

Mohl bys mi tu funkci trochu popsat?
Nemyslím si, že je nutné jí porozumět. Ale budiž. Podmínka na šestém řádku zjistí, zda pluginy prohlížeče jedou přes ActiveX (=> Internet Explorer), nebo přes systém pluginů od Netscapu (=> ostatní prohlížeče). Z flashového ActiveX objektu jde vymáčkout verze přes metodu GetVariable("$version") — která vrátí něco jako "WIN 11,1,105,55". Z netscapáckého pluginu se zase dá vyždímat vlastnost description — která vrátí něco jako "Shockwave Flash 10.3 r181". V obou druzích řetězce mě zajímají první tři čísla, která na řádku 10 vyzobne regulární výraz. Jelikož je výsledkem vyzobnutí pole řetězců a já bych rád pole čísel, provedu ještě pár parseIntů a výsledné trojčíslí vrátím returnem. Pokud cokoliv selhalo, předpokládám, že Flash není, a proto vrátím [0, 0, 0].

Použití funkce verzeFlashe:
var v = verzeFlashe();
if(v[0] > 9 || (v[0] == 9 && v[2] >= 115))
{
  alert("Máme Flash 9.0.115 či vyšší, takže můžeme mít video v H264, hurá!");
}
else
{
  alert("Máme buď starší Flash, nebo nemáme žádný Flash.");
}
kubakoumak
Profil
Jseš moc hodnej, díky :-). Doufám, že to pomůže i někomu jinému.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0