2009-02-13 5 views
2

J'ai un fichier SWF qui se comporte étrangement sur IE. Le fait est qu'un certain rectangle ne se dessine pas lors de la visualisation de la page après le premier chargement. Il apparaît seulement dans IE et une solution rapide est de rendre le chemin vers le swf unique à chaque requête afin qu'il ne soit pas mis en cache. Le reste de mes objets est dessiné à chaque fois.Rectangle ne se dessine pas sur l'objet racine à l'actualisation dans IE

Le code est très simple

 
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 }); 
} 

qui est appelé dans mon constructeur. La classe entière peut être vu ici: http://katuaq.wwwdev.punktum.gl/flash/bioteaser.txt, et le swf vivent ici: http://katuaq.wwwdev.punktum.gl/.

Comme vous l'avez probablement déjà compris, c'est l'arrière-plan gris derrière les images qui ne se dessine pas lors de l'actualisation dans IE.

Répondre

1

N'appelez pas drawStage du constructeur. Configurez un écouteur pour l'événement ADDED_TO_STAGE dans le constructeur et appelez drawStage à partir du gestionnaire pour cet événement. De plus, vous pouvez constater que vos dimensions Stage changent lorsque l'utilisateur utilise la fonction de zoom du navigateur, alors écoutez l'événement RESIZE et agissez en conséquence.

+0

Cela a fait l'affaire. Init et Complete ne semblent pas être appelés dans mon IE. –

0

IE fait quelque chose d'étrange avec le swf en cache qui fait que la largeur de la scène est erronée pour les premières images. La solution est soit d'attendre un peu avant de lire cette valeur ou simplement d'utiliser un nombre fixe.

0

C'est définitivement un problème connu. Lors de l'actualisation, l'étape. {SIZES} est définie sur 0 dans IE. Vous pouvez ajouter un écouteur (saisir cadre ou redimensionner) vérifier les tailles d'être « non nulle »:

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); 
    } 
} 

En outre, vous devez savoir que de nombreux événements ne seront pas traitées correctement dans certains navigateurs:

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

0

C'est un problème connu avec la mise en cache et Internet Explorer.

La solution la plus simple est celle que vous avez en ce moment. Rendre le chemin swf unique. Sinon, vous inutile d'obscurcir votre code ActionScript. Sachez que ce problème apparaît également lorsque vous chargez des images dans Flash.

Si une fois chargé, vous pourriez avoir des problèmes avec IE. Là, vous devrez rendre le chemin vers les images unique.

Questions connexes