Jump to content

Flash-detection/redirect


son

Recommended Posts

Have created a tiny Flash-intro movie and would like to send user to page home.htm (page it automatically redirects once movie is ended). The Run Active Content file produced by Flash deals with the detection of the Flash version and this should be the place where I amend the script. Looking into the produced file I cannot see anywhere I could change the script to send to home.htm if someone does not have the right version installed (or none at all). This is not lazyness, believe me. It is just that I really dunno have a clue:-(The code is as:

//v1.7// Flash Player Version Detection// Detect Client Browser type// Copyright 2005-2007 Adobe Systems Incorporated.  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 informationfunction 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];                                                var versionRevision = descArray[3];                                                if (versionRevision == "") {                                                                versionRevision = descArray[4];                                                }                                                if (versionRevision[0] == "d") {                                                                versionRevision = versionRevision.substring(1);                                                } else if (versionRevision[0] == "r") {                                                                versionRevision = versionRevision.substring(1);                                                                if (versionRevision.indexOf("d") > 0) {                                                                                versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));                                                                }                                                }                                                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 availablefunction 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;                }}function AC_AddExtension(src, ext){  if (src.indexOf('?') != -1)    return src.replace(/\?/, ext+'?');   else    return src + ext;}function AC_Generateobj(objAttrs, params, embedAttrs) {   var str = '';  if (isIE && isWin && !isOpera)  {    str += '<object ';    for (var i in objAttrs)    {      str += i + '="' + objAttrs[i] + '" ';    }    str += '>';    for (var i in params)    {      str += '<param name="' + i + '" value="' + params[i] + '" /> ';    }    str += '</object>';  }  else  {    str += '<embed ';    for (var i in embedAttrs)    {      str += i + '="' + embedAttrs[i] + '" ';    }    str += '> </embed>';  }  document.write(str);}function AC_FL_RunContent(){  var ret =     AC_GetArgs    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"     , "application/x-shockwave-flash"    );  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);}function AC_SW_RunContent(){  var ret =     AC_GetArgs    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"     , null    );  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);}function AC_GetArgs(args, ext, srcParamName, classid, mimeType){  var ret = new Object();  ret.embedAttrs = new Object();  ret.params = new Object();  ret.objAttrs = new Object();  for (var i=0; i < args.length; i=i+2){    var currArg = args[i].toLowerCase();        switch (currArg){                case "classid":        break;      case "pluginspage":        ret.embedAttrs[args[i]] = args[i+1];        break;      case "src":      case "movie":                      args[i+1] = AC_AddExtension(args[i+1], ext);        ret.embedAttrs["src"] = args[i+1];        ret.params[srcParamName] = args[i+1];        break;      case "onafterupdate":      case "onbeforeupdate":      case "onblur":      case "oncellchange":      case "onclick":      case "ondblclick":      case "ondrag":      case "ondragend":      case "ondragenter":      case "ondragleave":      case "ondragover":      case "ondrop":      case "onfinish":      case "onfocus":      case "onhelp":      case "onmousedown":      case "onmouseup":      case "onmouseover":      case "onmousemove":      case "onmouseout":      case "onkeypress":      case "onkeydown":      case "onkeyup":      case "onload":      case "onlosecapture":      case "onpropertychange":      case "onreadystatechange":      case "onrowsdelete":      case "onrowenter":      case "onrowexit":      case "onrowsinserted":      case "onstart":      case "onscroll":      case "onbeforeeditfocus":      case "onactivate":      case "onbeforedeactivate":      case "ondeactivate":      case "type":      case "codebase":      case "id":        ret.objAttrs[args[i]] = args[i+1];        break;      case "width":      case "height":      case "align":      case "vspace":       case "hspace":      case "class":      case "title":      case "accesskey":      case "name":      case "tabindex":        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];        break;      default:        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];    }  }  ret.objAttrs["classid"] = classid;  if (mimeType) ret.embedAttrs["type"] = mimeType;  return ret;}

Any directions appreciated.Son

Link to comment
Share on other sites

                versionStr = GetSwfVer();                if (versionStr == -1 ) {                                return false;

( I tried

versionStr = if (GetSwfVer() == -1)  window.location.href = 'home.htm';[/

Please let me know if that is the bit I need changing, then at least I know there is something wrong with my syntax...Son

Link to comment
Share on other sites

You can put that code wherever you want after the GetSwfVer function has been defined. It would probably be best to leave the standard code as it is so that you can replace it if it gets updated and add your own code somewhere else.

Link to comment
Share on other sites

You can put that code wherever you want after the GetSwfVer function has been defined. It would probably be best to leave the standard code as it is so that you can replace it if it gets updated and add your own code somewhere else.
I put
if (GetSwfVer() == -1)  window.location.href = 'home.htm';

at end of AC_RunActiveContent.js (after last closing bracket), but Netscape does only display 'Additional plugins are required ...' message. I would have thought it should have gone automatically to home.htm. Am I msissing something?Son

Link to comment
Share on other sites

It's hard to say without seeing the code. If the GetSwfVer function is defined, and it actually works (I don't know if that function works or not), then if the plugin is not found and the function returns -1 it should be redirecting.

Link to comment
Share on other sites

It's hard to say without seeing the code. If the GetSwfVer function is defined, and it actually works (I don't know if that function works or not), then if the plugin is not found and the function returns -1 it should be redirecting.
It is defined beforehand. The whole code for the Active Run is now:
//v1.7// Flash Player Version Detection// Detect Client Browser type// Copyright 2005-2007 Adobe Systems Incorporated.  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 informationfunction 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];                                                var versionRevision = descArray[3];                                                if (versionRevision == "") {                                                                versionRevision = descArray[4];                                                }                                                if (versionRevision[0] == "d") {                                                                versionRevision = versionRevision.substring(1);                                                } else if (versionRevision[0] == "r") {                                                                versionRevision = versionRevision.substring(1);                                                                if (versionRevision.indexOf("d") > 0) {                                                                                versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));                                                                }                                                }                                                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 availablefunction 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;                }}function AC_AddExtension(src, ext){  if (src.indexOf('?') != -1)    return src.replace(/\?/, ext+'?');   else    return src + ext;}function AC_Generateobj(objAttrs, params, embedAttrs) {   var str = '';  if (isIE && isWin && !isOpera)  {    str += '<object ';    for (var i in objAttrs)    {      str += i + '="' + objAttrs[i] + '" ';    }    str += '>';    for (var i in params)    {      str += '<param name="' + i + '" value="' + params[i] + '" /> ';    }    str += '</object>';  }  else  {    str += '<embed ';    for (var i in embedAttrs)    {      str += i + '="' + embedAttrs[i] + '" ';    }    str += '> </embed>';  }  document.write(str);}function AC_FL_RunContent(){  var ret =     AC_GetArgs    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"     , "application/x-shockwave-flash"    );  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);}function AC_SW_RunContent(){  var ret =     AC_GetArgs    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"     , null    );  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);}function AC_GetArgs(args, ext, srcParamName, classid, mimeType){  var ret = new Object();  ret.embedAttrs = new Object();  ret.params = new Object();  ret.objAttrs = new Object();  for (var i=0; i < args.length; i=i+2){    var currArg = args[i].toLowerCase();        switch (currArg){                case "classid":        break;      case "pluginspage":        ret.embedAttrs[args[i]] = args[i+1];        break;      case "src":      case "movie":                      args[i+1] = AC_AddExtension(args[i+1], ext);        ret.embedAttrs["src"] = args[i+1];        ret.params[srcParamName] = args[i+1];        break;      case "onafterupdate":      case "onbeforeupdate":      case "onblur":      case "oncellchange":      case "onclick":      case "ondblclick":      case "ondrag":      case "ondragend":      case "ondragenter":      case "ondragleave":      case "ondragover":      case "ondrop":      case "onfinish":      case "onfocus":      case "onhelp":      case "onmousedown":      case "onmouseup":      case "onmouseover":      case "onmousemove":      case "onmouseout":      case "onkeypress":      case "onkeydown":      case "onkeyup":      case "onload":      case "onlosecapture":      case "onpropertychange":      case "onreadystatechange":      case "onrowsdelete":      case "onrowenter":      case "onrowexit":      case "onrowsinserted":      case "onstart":      case "onscroll":      case "onbeforeeditfocus":      case "onactivate":      case "onbeforedeactivate":      case "ondeactivate":      case "type":      case "codebase":      case "id":        ret.objAttrs[args[i]] = args[i+1];        break;      case "width":      case "height":      case "align":      case "vspace":       case "hspace":      case "class":      case "title":      case "accesskey":      case "name":      case "tabindex":        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];        break;      default:        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];    }  }  ret.objAttrs["classid"] = classid;  if (mimeType) ret.embedAttrs["type"] = mimeType;  return ret;}if (GetSwfVer() == -1)  window.location.href = 'home.htm';

and as the end bit is missing (too long) after that comes

return ret;}if (GetSwfVer() == -1)  window.location.href = 'home.htm';

Do you know what is going wrong? The code was automatically produced by Flash and I just added the suggested bit at end...Son

Link to comment
Share on other sites

That should work. See what the function is returning.alert(GetSwfVer());
I tried it and it showed version '-1' correctly for Netscape. And now believe it or now taking this bit out again it worked and redirected to home.htm. Could that be a cache thing? Also, is there another way to test that again? Not so keen on Netscape and asked myself if there is a better way of testing (instead of having browers installed I do not like)...Thanks,Son
Link to comment
Share on other sites

It might have been cached. You can clear the cache before you test, I think Netscape is now based on Firefox so you should be able to use Ctrl-Shift-Del to clear the cache. I wouldn't worry too much about Netscrape though, if it works in IE and Firefox it will work in NS. I actually develop everything in either Firefox or Opera, make sure it works in the other one, then test it with IE and Safari. I find that way leads to the fewest changes that I have to make. If something works in both Firefox and Opera it will almost always work everywhere (with the occasional IE bug fix).

Link to comment
Share on other sites

It might have been cached. You can clear the cache before you test, I think Netscape is now based on Firefox so you should be able to use Ctrl-Shift-Del to clear the cache. I wouldn't worry too much about Netscrape though, if it works in IE and Firefox it will work in NS. I actually develop everything in either Firefox or Opera, make sure it works in the other one, then test it with IE and Safari. I find that way leads to the fewest changes that I have to make. If something works in both Firefox and Opera it will almost always work everywhere (with the occasional IE bug fix).
Thanks for sharing your knowledge. It is very helpful to hear how experienced web designer/programmer are doing things like that:-)Son
Link to comment
Share on other sites

Netscape is dead now, anyway. Netscape 9 == Firefox 2.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...