Flash sharedobject flush帮助

时间:2011-05-21 17:01:28

标签: flash flush shared-objects

在我的网站上,我有一个flash横幅,可以在用户更改页面时保存其框架位置,以便在用户每次浏览网站时继续播放而不是重新启动。这是使用sharedobject实现的。它的效果很好,除了一件事:饼干持续时间太长。即使我在当天晚些时候回到现场,它仍然会重新加载我的最后一个位置。我想在用户导航远离域名时刷新共享对象,但我不确定如何实现它。请有人帮忙!

好的,谢谢你的回复Lars。这就是我得到的:

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以检查它是否有效但是没有。我做错了什么?

1 个答案:

答案 0 :(得分:2)

SharedObject不是cookie,它永不过期。

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

修改

我认为这可行,基本上删除了代码中的一些if / else逻辑,而是始终执行以下步骤:

  1. 重置/清除SharedObject(如果有) 过期。
  2. 保存新的时间戳,用于 下一次运行。
  3. 做原始检查 of mySharedObject.data.currentFrame (如果重置了SharedObject 第1步,它将像第一个 运行)。
  4. -

    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;
    }