Прямоугольник не рисуется на корневом объекте при обновлении в IE - PullRequest
2 голосов
/ 13 февраля 2009

У меня есть SWF-файл, который странно ведет себя в IE. Дело в том, что определенный прямоугольник не прорисовывается при просмотре страницы после первой загрузки. Он появляется только в IE, и быстрое решение - сделать путь к SWF уникальным при каждом запросе, чтобы он не кэшировался. Остальные мои объекты прорисовываются каждый раз.

Код очень прост

public function drawStage() 
{ 
    var bgRect:Shape = new Shape();

    bgRect.graphics.beginFill(0x5F5F5F);
    bgRect.graphics.drawRect(0,84, stage.stageWidth, 115);
    bgRect.graphics.endFill();
    bgRect.alpha = 0;

    addChild(bgRect);

    Tweener.addTween(bgRect, { alpha: 1, time: 1 }); 
}

, который вызывается в моем конструкторе. Весь класс можно увидеть здесь: http://katuaq.wwwdev.punktum.gl/flash/bioteaser.txt, и SWF живут здесь: http://katuaq.wwwdev.punktum.gl/.

Как вы, наверное, уже поняли, это серый фон за изображениями, который не отображается при обновлении в IE.

Ответы [ 4 ]

1 голос
/ 14 февраля 2009

Не вызывайте drawStage из конструктора. Установите прослушиватель для события ADDED_TO_STAGE в конструкторе и вызовите drawStage из обработчика для этого события. Кроме того, вы можете обнаружить, что ваши размеры рабочей области изменяются, когда пользователь использует функцию масштабирования браузера, поэтому прислушайтесь к событию RESIZE и действуйте соответствующим образом.

0 голосов
/ 16 февраля 2009

Это известная проблема с кэшированием и Internet Explorer.

Самое простое решение - это то, которое у вас есть сейчас. Сделать путь SWF уникальным. В противном случае вам не нужно запутывать свой код ActionScript.

Имейте в виду, что эта проблема также возникает при загрузке изображений во флэш-память. Если после загрузки вы можете получить проблемы с IE. Там вам нужно будет сделать путь к изображениям уникальным.

0 голосов
/ 15 февраля 2009

Это определенно известная проблема. При обновлении stage. {SIZES} устанавливаются в 0 в IE. Вы можете добавить прослушиватель (введите фрейм или изменить размер), который проверяет, чтобы размеры были «ненулевыми»:

stage.addEventListener(Event.RESIZE, onResize);
stage.dispatchEvent(new Event(Event.RESIZE));

function onResize(event:Event):void 
{
    if (stage.stageHeight > 0 && stage.stageWidth > 0) 
    {
        stage.removeEventListener(Event.RESIZE, resizeHandler); 
    }
}

Кроме того, вы должны знать, что многочисленные события не будут правильно обрабатываться в определенных браузерах:

http://www.actionscript.org/forums/showthread.php3?t=136345&highlight=timeline+preloader

0 голосов
/ 14 февраля 2009

IE делает что-то странное с кэшированными SWF-файлами, что делает stageWidth неправильным для первых нескольких кадров. Решение состоит в том, чтобы либо немного подождать, прежде чем читать это значение, либо просто использовать заданное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...