Teppo Pihlajamäki logo
Elämäni
Esittely 
Valokuvia 
Kirjoituksia 
Linkkejä 
Yhteystiedot 
Verkkosivuni
Nettitemppu 
Hauvapeli 
Iskulauseita 
Shakkikello 
Taidegalleria 
Haikueditori 
Etsi viisi virhettä 

Flash-version tarkistaminen

Flash-esityksen täytyy useinkin tarkistaa mikä plugin-versio käyttäjällä on selaimessaan, jotta voidaan todeta jatketaanko esitystä, vai pysäytetäänkö se, koska ko. pluginilla ei ole tarvittavia uusia ominaisuuksia.

Sivulla http://www.macromedia.com/support/flash/ts/documents/version.htm Macromedia tarjoaa tällaisen ratkaisun:

playerVersion = eval("$version"); 
myLength = length(playerVersion);
while (i<=mylength) {
 i = i+1; 
 temp = substring(playerVersion, i, 1); 
 if (temp eq " ") { 
  platform = substring(playerVersion, 1, i-1); 
  majorVersion = substring(playerVersion, i+1, 1);
  secondHalf = substring(playerVersion, i+1, myLength-i);
  minorVersion = substring(secondHalf, 5, 2);
 } 
}

Tässä koodissa on joitain ongelmia:

  • Vakavinta on, että koodi ei enää toimi oikein, kun Flash versionumero saavuttaa kymmenen. Koodi palauttaa yksinumeroisen luvun majorVersion-muuttujassa. Toisin sanoen, koodi luulee, että versionumero on 1.
  • Koodi olettaa, että minorVersion on aina kaksinumeroinen luku (tämä saattaa pitää paikkansakin riippuen Macromedian toimintatavasta tulevaisuudessa)
  • Jotkin koodin ominaisuudet ovat vanhentuneita, eikä niitä enää suositella käytettäväksi, koska niitä ei ehkä laiteta tuleviin Flash-versioihin. Vertailuoperaattori "eq" on yksi tällainen ominaisuus, ja piilotettu muuttuja "$version" saattaa olla toinen.
  • While-silmukka käy läpi koko merkkijonon, vaikka se olisi jo löytänyt osajonon, jota se etsi. Tämä ei ole vakava virhe, koska tämä koodi suoritetaan tyypillisesti vain kerran, mutta se on kuitenkin huonoa ohjelmointityyliä.

Olen luonut oman koodini, joka korjaa nämä ongelmat. Se pystyy erottamaan Flash version 5 ja 6, ja todennäköisesti kaikki tulevat versiot. Versioista 4 ja sitä aikaisemmista koodi pystyy vain kertomaan, että plugin on jokin niistä. Macromedian koodi ei myöskään pysty erottelemaan aikaisempia plugin-versioita kuin 4.0r11.

Frame-rakenteen pitäisi olla suunnilleen tällainen:
1. preloader
2. preloader
3. versiontunnistuskoodi
4. stop(); tai majorVersion = 4; nelosversiota ja aikaisempia varten
5. "onWithTheShow"

Ja tässä on koodi:

var version = getVersion();
var space = version.indexOf(" ");
var comma1 = version.indexOf(",");
var comma2 = version.indexOf(",", comma1+1);
var comma3 = version.indexOf(",", comma2+1);
var platform = version.substring(0, space);
var majorVersion = version.substring(space+1, comma1);
var minorVersion = version.substring(comma2+1, comma3);
if ((majorVersion>=5) != false) {
	gotoAndPlay ("onWithTheShow");
}

Ihmettelette ehtolauseketta (majorVersion>=5) != false, joka näyttää tarpeettoman monimutkaiselta. Plugin 4 ei ymmärrä uusia vertailuoperaattoreita, ja menisi kohtaan "onWithTheShow" . Kaksinkertainen vertailu estää sen, ja nelosversion plugin menee frameen numero 4. Voit laittaa sinne stop();-käskyn ja pyytää käyttäjää päivittämään plugininsa. Voit myös laittaa käskyn majorVersion = 4; sinne.

On tärkeää, että tätä koodia edeltää preloader. Jos "onWithTheShow" ei ole vielä olemassa, esitys etenee nelosframeen jopa uusissa plugineissa. Jos siellä on stop(); käsky, niin preloader voidaan koostaa uusista käskyistä, joita plugin 4 ei ymmärrä, koska plugin 4 päätyy nelosframeen joka tapauksessa.

Ainakin Flash 5.0a Mac -ympäristössä, kun menet editorissa normaalimodeen, getVersion() menettää sulkumerkkinsä, ja koodi ei enää toimi oikein.

Alla on yksinkertainen Flash-esitys, joka yrittää tunnistaa pluginin version:


YouTube-videoitani:

Pokerin peluuta
televisiossa.

Korttipakan
sekoittaminen
yhdellä kädellä.

Hamsterille
askartelemani lelu.