Aide - Recherche - Membres - Calendrier
Version complète : swfLoader et le cache du navigateur
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
startx25
Bonjour à tous.

J'ai un soucis avec le cache du navigateur.

Sous php je faisais ceci dans la balise object :

<?
echo '<param name="movie" value="fichier.swf?var='.time().'">';
?>

et je pouvais finter le cache du navigateur pour forcer à recharger mon fichier swf en cas d'actualisation de la page.


Est-ce possible de faire pareil sous flex ?

Merci de vos conseils
Fusion
Essaie de faire un :
CODE
navigateToURL("monswf.swf",'_self');


Ca va naviguer vers ton swf sans changer de page, comme un Refresh en fait icon_razz.gif
startx25
Merci pour ta réponse

Mais je ne peux faire ce que tu me propose,

En faite je suis dans des Accordeons,
et dans dedans il y'a trois swfLoader vers trois fichiers swf.

Et je voudrais que lorssque je mets à jour les fichiers sur le serveur web, les clients récupére la nouvelle version

Or pour le moment il ont toujour l'ancienne

+A
Fusion
Tu ne peux pas faire trois removeChild suivis de trois addChild en douce icon_biggrin.gif ?
startx25
euh ? comprends pas ?


mais ne pourrais-je pas construire le nom du fichier avec une variable ?
un peu comme ça :

sous flex créer une varibale dynamique ?

file = "fichier.swf"
dyna = "?var="+time();

<mx:SWFLoader source=file+dyna width="100" height="100" />
Tonic
Si si tu peux créer un nom de variable dynamique, qui sur changement de valeur, chargera le swf que tu veux.

Un exemple :

CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">    
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            
            [Bindable]
            private var swfACharger : String;
            
            private function init():void
            {
                swfACharger="test2.swf";
            }
            
            
        ]]>
    </mx:Script>
    <mx:Button label="Charge" click="init()"/>
    <mx:SWFLoader id="img" source="{swfACharger}" complete="init()"/>
</mx:Application>
Fusion
CODE
<?xml version="1.0"?>
<!-- Simple example to demonstrate the Accordion layout container. -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Panel title="Accordion Container Example" height="90%" width="90%"
        paddingTop="10" paddingLeft="10" paddingRight="10" paddingBottom="10">

        <mx:Label width="100%" color="blue"
            text="Select an Accordion navigator button to change the panel."/>

        <mx:Accordion id="accordion" width="100%" height="100%">
            <!-- Define each panel using a VBox container. -->
            <mx:VBox label="Accordion Button for Panel 1">
                <mx:SWFLoader source="201.swf"/>
            </mx:VBox>

            <mx:VBox label="Accordion Button for Panel 2">
                <mx:SWFLoader source="2080.swf"/>
            </mx:VBox>

            <mx:VBox label="Accordion Button for Panel 3">
                <mx:SWFLoader source="MvB.swf"/>
            </mx:VBox>
        </mx:Accordion>

        <mx:Label width="100%" color="blue"
            text="Programmatically select the panel using a Button control."/>

        <mx:HBox>
            <mx:Button label="Select Panel 1" click="accordion.selectedIndex=0;"/>
            <mx:Button label="Select Panel 2" click="accordion.selectedIndex=1;"/>
            <mx:Button label="Select Panel 3" click="accordion.selectedIndex=2;"/>
        </mx:HBox>
    
    </mx:Panel>
</mx:Application>


Là, lorsque je fais un Refresh, les SWFs sont actualisés comme il faut. Est-ce que tu cherches à faire autre chose? Du genre, changer les SWFs sans être obligé de faire un Refresh?
startx25
Merci fusion, mais dans ton code, les trois swf sont chargé chez le client.


Mais moi je voudrais pouvoir mettre à jour les trois swf sur le serveur web et lors de refresh du navigateur, le client prends la nouvelle version des trois swf.

Tonic
Normalement, si tu mets à jours les swf, et que tu les recharges avec une adresse dynamique (via ton url modifiée avec time(), ca doit recharger le swf corectement.

Tu as regardé l'exemple que je t'aie donnée avec la propriété bindable.
startx25
".....et que tu les recharges avec une adresse dynamique (via ton url modifiée avec time(),....."

Justement, ce n'est pas via l'url qu'est charger le swf

Les swf sont charger depuis l'interface de flex (eclipse)
et je voudrais que ces swf soit mis à jour automatiquement.

en évitant un bouton supplémentaire, mais uniquement en actualisant la page.

Merci pour votre aide
Tonic
CITATION(startx25 @ Jun 28 2007, 01:53 PM) *
Justement, ce n'est pas via l'url qu'est charger le swf


Kesako ?? icon_confused.gif

Tu lui passes bien une source à charger.

Donc concrètement, si tu donnes : "source='unSwf.swf?id=5'"
ou "source='unSwf.swf?id=2'"

Le navigateur ne trouvera pas le fichier dans le cache, et ira rechercher ce swf sur le serveur.
Donc si entre temps tu as modifier ce swf sur ton serveur, et que tu décides de recharger ta page, le swf sera misà jour...
Fusion
Son problème n'est pas un problème d'URL.

Pour comprendre, essaie parmi les SWFs à charger dans l'accordéon, d'échanger les noms dans le dossier, movie1.swf devient movie2.swf et inversément.
Et si tu recharges, l'application ne prend pas en compte la permutation. Ce qui veut dire que si tu as modifié ton SWF cela ne sera pas pris en compte par le Flex. C'est ça l'ennui.

J'ai fait des tests, notamment avec la propriété cachePolicy, en la passant à off, mais rien de concluant. Peut-être cacheHeuristic, en la passant à off.


Une idée qui me vient (mais porcasse) :

- charger un SWF bidon, le plus léger possible, et tout de suite après charger à nouveau le SWF. S'il a changé entre-temps, il devrait être chargé et à jour
Je n'ai pas testé...
startx25
Absolument

....Donc concrètement, si tu donnes : "source='unSwf.swf?id=5'"
ou "source='unSwf.swf?id=2'"....


mais comment dans le fichier mxml de flex rendre le "5" ou le "2" aléatoire ?

startx25
Merci fusion d'avoir compris un problème que j'avais du mal à expliquez icon_biggrin.gif

Fusion
CITATION(startx25 @ Jun 28 2007, 04:08 PM) *
mais comment dans le fichier mxml de flex rendre le "5" ou le "2" aléatoire ?


Passe-lui le temps courant.
CODE
var i:Date = new Date();


Là tu es assuré d'avoir un nombre unique icon_razz.gif
Tonic
CITATION(startx25 @ Jun 28 2007, 02:08 PM) *
Absolument

....Donc concrètement, si tu donnes : "source='unSwf.swf?id=5'"
ou "source='unSwf.swf?id=2'"....
mais comment dans le fichier mxml de flex rendre le "5" ou le "2" aléatoire ?


un getTimer().
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.