2011-05-21 60 views
0

在我的网站上,我有一个Flash横幅,可在用户更改页面时保存其框架位置,以便每次用户在网站周围浏览时都会继续播放而不是重新启动。这是使用sharedobject实现的。除了一件事外,它效果很好:cookie持续时间过长。即使当我稍后回到现场时,它仍然会重新载入我的最后一个位置。我想在用户从域名导航离开时刷新sharedobject,但我不确定如何实现它。请有人帮忙!Flash sharedobject刷新帮助

好的谢谢你的回应拉尔斯。这是我得到的:

var mySharedObject:SharedObject = SharedObject.getLocal("displayCookie"); 

var expiredate = mySharedObject.data.expires; 

var timeobject = new Date(); 

var timestamp = timeobject.getTime(); 

if (expiredate<=timestamp && expiredate != null) { 
for (var i in mySharedObject.data) { 
delete mySharedObject.data[i]; 
} 
mySharedObject.flush(); 
} else if (expiredate == null) { 

var oneday = 100; 

var expiresIn = 1; 

var expiretimestamp = timestamp+expiresIn*oneday; 

mySharedObject.data.expires = expiretimestamp; 

mySharedObject.flush(); 
} 
if (mySharedObject.data.introcheck != 0) { 
mySharedObject.data.introcheck = 0; 
mySharedObject.flush(); 
gotoAndPlay(1); 
} else { 

addEventListener(Event.ENTER_FRAME, checkLoadedFrames); 

function checkLoadedFrames(e:Event):void { 
    if(this.framesLoaded == this.totalFrames) { 
     removeEventListener(Event.ENTER_FRAME, checkLoadedFrames); 
     checkSharedObject(); 
    } 
} 

function checkSharedObject():void { 
    if(mySharedObject.data.currentFrame){ 
     gotoAndPlay(mySharedObject.data.currentFrame); 
    } 
    addEventListener(Event.ENTER_FRAME, saveCurrentFrame); 
} 

function saveCurrentFrame(e:Event):void { 
    mySharedObject.data.currentFrame = this.currentFrame; 
} 
} 

我将oneday var更改为100ms,以检查它是否工作,但它没有。我究竟做错了什么?

回答

2

SharedObject不是一个cookie,它永远不会过期。

假设这个问题与this previous question大致相同,我想你可以从一个SharedObject切换到一个浏览器cookie(它有过期机制),并使用ExternalInterface读/写它,或者你可以保存一个时间戳在SharedObject上,并忽略它/重置它,如果它太旧了。

编辑

我觉得这可能是工作,基本消除了一些的if/else代码的逻辑,而总是做这些步骤:如果

  1. 重置/清除共享对象已过期 。
  2. 保存新的时间戳, 下一次运行。
  3. 做mySharedObject.data.currentFrame 的原件核对 (如果共享对象是在 步骤1复位,它会像第一 运行)。

-

var mySharedObject:SharedObject = SharedObject.getLocal("displayCookie"); 

var expiredate = mySharedObject.data.expires; 

var timeobject = new Date(); 

var timestamp = timeobject.getTime(); 

// Reset/clear the SO if it has expired 
if (expiredate != null && expiredate <= timestamp) 
{ 
    for (var i in mySharedObject.data) 
    { 
     delete mySharedObject.data[i]; 
    } 
    mySharedObject.flush(); 
} 

// Make a new timestamp, for comparing the next run to this one 

var oneday = 10000; // Test value, 10 seconds 

var expiresIn = 1; 

var expiretimestamp = timestamp + expiresIn * oneday; 

mySharedObject.data.expires = expiretimestamp; 

mySharedObject.flush(); 

// Do the original check 
addEventListener(Event.ENTER_FRAME, checkLoadedFrames); 

function checkLoadedFrames(e:Event):void 
{ 
    if (this.framesLoaded == this.totalFrames) 
    { 
     removeEventListener(Event.ENTER_FRAME, checkLoadedFrames); 
     checkSharedObject(); 
    } 
} 

function checkSharedObject():void 
{ 
    if (mySharedObject.data.currentFrame) 
    { 
     gotoAndPlay(mySharedObject.data.currentFrame); 
    } 
    addEventListener(Event.ENTER_FRAME, saveCurrentFrame); 
} 

function saveCurrentFrame(e:Event):void 
{ 
    mySharedObject.data.currentFrame = this.currentFrame; 
} 
+0

感谢拉尔斯。我不想让你觉得我没有学到任何东西就会滥用自己的技能。我有很多事情要做,而且没有很多空闲时间。除了这个问题,我并不需要知道动作,所以试图去学习这一切都是令人讨厌的。我在上面添加了一些代码,这对我来说似乎是有意义的,但它不起作用。有任何想法吗? – nutman 2011-05-22 08:55:36

+0

完美的作品。你是个明星! – nutman 2011-05-22 11:15:36