0

私のサイトには、ユーザーがページを変更したときにフレーム位置を保存するフラッシュ バナーがあり、ユーザーがサイト内を移動するたびに再起動するのではなく、引き続き再生されます。これは、sharedobject を使用して実装されました。1 つのことを除いて、うまく機能します。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を使用して読み取り/書き込みを行うか、タイムスタンプを保存することができると思います古い場合は無視/リセットします。

編集

基本的にコードの if/else ロジックの一部を削除し、代わりに常に次の手順を実行することで、これでうまくいくと思います。

  1. 有効期限が切れている場合は、SharedObject をリセット/クリアします。
  2. 次回の実行のために、新しいタイムスタンプを保存します。
  3. mySharedObject.data.currentFrame の元のチェックを行います (手順 1 で SharedObject がリセットされた場合は、最初の実行のようになります)。

-

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 に答える