[SWFObject] Flash detection problem

Geoff Stearns geoff at deconcept.com
Tue May 9 19:18:56 PDT 2006


I've already made some modifications to swfobject a few months ago to  
address this.

I start by just doing a full version lookup, and only doing the minor  
version lookup (which causes the crash) if you specifically request a  
minor version.

the only time this *really* sucks is when you use express install, in  
which case you want to check for 6.0.65 or higher, so you have to do  
the minor lookup for that if they have v.6... but it looks like you  
might have some new tricks in the code you pasted, so i'll see what i  
can pillage from there :)



On May 9, 2006, at 6:38 PM, Michael Williams wrote:

> This is a known issue with the detection that SWFObject and the
> Macromedia Detection kit use. The axo.GetVariable("$version"); call
> crashes Flash Player 6.0 prior to version r47. So we created some work
> around scripts to default to specific values if we can figure out that
> you have a player that will crash or have problems with the simpler
> GetVariable path. This script will be made public in a few weeks after
> we have completed testing. Geoff might want to take elements of it and
> add them to the SWFObject since I know he has had the same issue. Just
> make sure you give attribution to Adobe.
>
> Here is the updated script. DetectFlashVer(reqMajorVer, reqMinorVer,
> reqRevision) is the main function:
>
> // Flash Player Version Detection - Rev 1.5
> // Detect Client Browser type
> // Copyright 2006 Adobe Systems, Inc. All rights reserved.
> var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true :  
> false;
> var isWin = (navigator.appVersion.toLowerCase().indexOf("win") !=  
> -1) ?
> true : false;
> var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true :
> false;
>
> function ControlVersion()
> {
> 	var version;
> 	var axo;
> 	var e;
>
> 	// NOTE : new ActiveXObject(strFoo) throws an exception if
> strFoo isn't in the registry
>
> 	try {
> 		// version will be set for 7.X or greater players
> 		axo = new
> ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
> 		version = axo.GetVariable("$version");
> 	} catch (e) {
> 	}
>
> 	if (!version)
> 	{
> 		try {
> 			// version will be set for 6.X players only
> 			axo = new
> ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
> 			
> 			// installed player is some revision of 6.0
> 			// GetVariable("$version") crashes for versions
> 6.0.22 through 6.0.29,
> 			// so we have to be careful.
> 			
> 			// default to the first public version
> 			version = "WIN 6,0,21,0";
>
> 			// throws if AllowScripAccess does not exist
> (introduced in 6.0r47)		
> 			axo.AllowScriptAccess = "always";
>
> 			// safe to call for 6.0r47 or greater
> 			version = axo.GetVariable("$version");
>
> 		} catch (e) {
> 		}
> 	}
>
> 	if (!version)
> 	{
> 		try {
> 			// version will be set for 4.X or 5.X player
> 			axo = new
> ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
> 			version = axo.GetVariable("$version");
> 		} catch (e) {
> 		}
> 	}
>
> 	if (!version)
> 	{
> 		try {
> 			// version will be set for 3.X player
> 			axo = new
> ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
> 			version = "WIN 3,0,18,0";
> 		} catch (e) {
> 		}
> 	}
>
> 	if (!version)
> 	{
> 		try {
> 			// version will be set for 2.X player
> 			axo = new
> ActiveXObject("ShockwaveFlash.ShockwaveFlash");
> 			version = "WIN 2,0,0,11";
> 		} catch (e) {
> 			version = -1;
> 		}
> 	}
> 	
> 	return version;
> }
>
> // JavaScript helper required to detect Flash Player PlugIn version
> information
> function GetSwfVer(){
> 	// NS/Opera version >= 3 check for Flash plugin in plugin array
> 	var flashVer = -1;
> 	
> 	if (navigator.plugins != null && navigator.plugins.length > 0) {
> 		if (navigator.plugins["Shockwave Flash 2.0"] ||
> navigator.plugins["Shockwave Flash"]) {
> 			var swVer2 = navigator.plugins["Shockwave Flash
> 2.0"] ? " 2.0" : "";
> 			var flashDescription =
> navigator.plugins["Shockwave Flash" + swVer2].description;
>
> 			var descArray = flashDescription.split(" ");
> 			var tempArrayMajor = descArray[2].split(".");
> 			var versionMajor = tempArrayMajor[0];
> 			var versionMinor = tempArrayMajor[1];
> 			if ( descArray[3] != "" ) {
> 				tempArrayMinor =
> descArray[3].split("r");
> 			} else {
> 				tempArrayMinor =
> descArray[4].split("r");
> 			}
> 			var versionRevision = tempArrayMinor[1] > 0 ?
> tempArrayMinor[1] : 0;
> 			var flashVer = versionMajor + "." + versionMinor
> + "." + versionRevision;
> 		}
> 	}
> 	// MSN/WebTV 2.6 supports Flash 4
> 	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6")
> != -1) flashVer = 4;
> 	// WebTV 2.5 supports Flash 3
> 	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5")
> != -1) flashVer = 3;
> 	// older WebTV supports Flash 2
> 	else if (navigator.userAgent.toLowerCase().indexOf("webtv") !=
> -1) flashVer = 2;
> 	else if ( isIE && isWin && !isOpera ) {
> 		flashVer = ControlVersion();
> 	}	
> 	return flashVer;
> }
>
> // When called with reqMajorVer, reqMinorVer, reqRevision returns true
> if that version or greater is available
> function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
> {
> 	versionStr = GetSwfVer();
> 	if (versionStr == -1 ) {
> 		return false;
> 	} else if (versionStr != 0) {
> 		if(isIE && isWin && !isOpera) {
> 			// Given "WIN 2,0,0,11"
> 			tempArray         = versionStr.split(" ");
> // ["WIN", "2,0,0,11"]
> 			tempString        = tempArray[1];
> // "2,0,0,11"
> 			versionArray      = tempString.split(",");
> // ['2', '0', '0', '11']
> 		} else {
> 			versionArray      = versionStr.split(".");
> 		}
> 		var versionMajor      = versionArray[0];
> 		var versionMinor      = versionArray[1];
> 		var versionRevision   = versionArray[2];
>
>         	// is the major.revision >= requested major.revision AND
> the minor version >= requested minor
> 		if (versionMajor > parseFloat(reqMajorVer)) {
> 			return true;
> 		} else if (versionMajor == parseFloat(reqMajorVer)) {
> 			if (versionMinor > parseFloat(reqMinorVer))
> 				return true;
> 			else if (versionMinor ==
> parseFloat(reqMinorVer)) {
> 				if (versionRevision >=
> parseFloat(reqRevision))
> 					return true;
> 			}
> 		}
> 		return false;
> 	}
> }
>
>
> ________________________________________
> From: swfobject-bounces at lists.deconcept.com
> [mailto:swfobject-bounces at lists.deconcept.com] On Behalf Of Lacy
> Garrison
> Sent: Tuesday, May 09, 2006 3:30 PM
> To: swfobject at lists.deconcept.com
> Subject: [SWFObject] Flash detection problem
>
> I have beating my head against a Flash detection problem for a few  
> days.
>
> I've downloaded swfobject.js and followed the instructions on how  
> to use
> it. However, the Flash detection fails in a specific version of IE
> (6.0.2900.2180.xpsp_sp2_gdr.050301-1519) with Flash Player 8.0.24.0
> installed.
>
> Has anyone seen this problem? Any advice you can give would be greatly
> appreciated.
>
> Thank you,
>
> Lacy Garrison
>
> _______________________________________________
> SWFObject mailing list
> SWFObject at lists.deconcept.com
> http://lists.deconcept.com/listinfo.cgi/swfobject-deconcept.com




More information about the Swfobject mailing list