在我的网站上,我有一个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以检查它是否有效但是没有。我做错了什么?
答案 0 :(得分:2)
SharedObject不是cookie,它永不过期。
假设这个问题与this previous question的情况大致相同,我猜你可以从SharedObject切换到浏览器cookie(具有过期机制),并使用{{3}对它进行读/写或者你可以在SharedObject上保存一个时间戳,如果太旧则忽略它/重置它。
修改强>:
我认为这可行,基本上删除了代码中的一些if / else逻辑,而是始终执行以下步骤:
-
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;
}