0

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

好的,谢谢你的回复拉斯。这是我得到的:

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

4

1 回答 1

2

SharedObject 不是 cookie,它永不过期。

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

编辑

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

  1. 如果 SharedObject 已过期,则重置/清除它。
  2. 保存一个新的时间戳,以备下次运行。
  3. 对 mySharedObject.data.currentFrame 进行原始检查(如果 SharedObject 在步骤 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;
}
于 2011-05-21T21:00:49.937 回答