Справка по Flash-объектам - PullRequest
0 голосов
/ 21 мая 2011

На моем сайте есть флеш-баннер, который сохраняет положение фрейма, когда пользователь меняет страницы, чтобы он продолжал играть, а не перезапускать каждый раз, когда пользователь перемещается по сайту.Это было реализовано с помощью 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;
}
}

Я изменил однодневную переменную на 100 мс, чтобы проверить, работает ли она, но это не так.Что я делаю не так?

1 Ответ

2 голосов
/ 22 мая 2011

SharedObject не является файлом cookie, срок его действия никогда не истекает.

Если предположить, что этот вопрос относится к тому же случаю, что и этот предыдущий вопрос , я думаю, вы могли бы либо переключиться с SharedObject накуки-файл браузера (который имеет механизмы для истечения срока действия) и чтения / записи в него с помощью 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;
}
...