Wednesday, September 17, 2008

Flex Cache Problem

There is very big problem in flex that's cache problem. When I was developing a Rich Internet application. I faced flex cache problem in Internet Explore & Firefox browser i was stuck badly.

Then I wrote this code for avoiding flex cache problem & i think it works a bit. Well still working on it.

I have added this code into index.template.html which is located into flex project html-template/index.template.html.

<Script Language="javascript">
var url = location.href;
var ots = parseInt(url.substring(url.indexOf("=")+1,url.length))+6000;
var dt = new Date();
var n = dt.getTime();
if(url.indexOf("?timeStamp=")!=-1)
{
if(isNumber(ots) && ots!=""){
if(nts>ots){
location.href=url.substring(0,url.indexOf("?"))+"?timeStamp="+nts;
}
}else{
location.href=url.substring(0,url.indexOf("?"))+"?timeStamp="+newTimeStamp;
}
}else{

location.href=url.substring(0,url.indexOf("?"))+"?timeStamp="+nts;
}

function isNumeric(val)
{
var vc = "0123456789.";
var isnum=true;
var c;
for (i = 0; i < val.length && isnum == true; i++)
{
c = val.charAt(i);
if (vc.indexOf(c) == -1)
{
isnum = false;
}
}
return isnum;
}
</Script>


Changes which i made in swf javascript code.


<script language="JavaScript" type="text/javascript">
<!--
// Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
var hasProductInstall = DetectFlashVer(6, 0, 65);

// Version check based upon the values defined in globals
var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

if ( hasProductInstall && !hasRequestedVersion ) {
// DO NOT MODIFY THE FOLLOWING FOUR LINES
// Location visited after installation is complete if installation is required
var MMPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
var MMredirectURL = window.location;
document.title = document.title.slice(0, 47) + " - Flash Player Installation";
var MMdoctitle = document.title;

AC_FL_RunContent(
"src", "playerProductInstall",
"FlashVars", "MMredirectURL="+MMredirectURL+'&MMplayerType='+MMPlayerType+'&MMdoctitle='+MMdoctitle+"",
"width", "${width}",
"height", "${height}",
"align", "middle",
"id", "${application}",
"quality", "high",
"bgcolor", "${bgcolor}",
"name", "${application}",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);
} else if (hasRequestedVersion) {
// if we've detected an acceptable version
// embed the Flash Content SWF when all tests are passed
AC_FL_RunContent(
"src", "${swf}"+"?run="+newTimeStamp,
"width", "${width}",
"height", "${height}",
"align", "middle",
"id", "${application}",
"quality", "high",
"bgcolor", "${bgcolor}",
"name", "${application}",
"allowScriptAccess","sameDomain",
"type", "application/x-shockwave-flash",
"pluginspage", "http://www.adobe.com/go/getflashplayer"
);
} else { // flash is too old or we can't detect the plugin
var alternateContent = 'Alternate HTML content should be placed here. '
+ 'This content requires the Adobe Flash Player. '
+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
document.write(alternateContent); // insert non-flash content
}
// -->
</script>


Httpservice not refreshing there's another point of flex cache. Some time Httpservice does not show refresh result in second time so we just use a parameter which we can send into with Httpservice Request.

Flex Function
public static function uniqueNum():String{
var d:String = new Date().getDate().toString();
var m:String = new Date().getMonth().toString();
var y:String = new Date().getFullYear().toString();
var h:String = new Date().getHours().toString();
var mm:String = new Date().getMinutes().toString();
var s:String = new Date().getSeconds().toString();
var unique:String = d + m + y + h + mm + s ;
return unique;
}



above code genrate unique number every request genrate new unique number and browser takes this url as a new url in every request. we can implement it.

httpservice.url = "index.php";
httservice.send(num:uniqueNum);


so it will return you always refresh result.

2 comments:

  1. It is working fine with firefox But there is problem with IE.

    ReplyDelete
  2. We can also avoid flex cache problem using meta tags..

    ReplyDelete