IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

window.addEventListener load ne fonctionne pas sous chrome


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut window.addEventListener load ne fonctionne pas sous chrome
    Bonjour ,

    je suis en train de tester la compatibilité d'une page avec chrome . Cette page appelle plusieurs fichiers js comme three.js et charge des fichiers .glb très lourd ( c'est pour de la 3d )

    pour être sûr que toutes les ressources sont chargées avant de lancer le rendu , j'utilise un window.addeventlistener( 'load' , ma fonction qui lance le rendu ); ça fonctionne très bien sous firefox qui charge tout avant de lancer le rendu , mais sous chrome ça ne fonctionne pas . le message d'attente disparait aussitôt apparu , et comme toutes les ressources ne sont pas chargées , j'ai des messages d'erreur concernant des propriétés d"objets undefined ...forcément .

    d'où la question : quoi utiliser à la place de window.addeventlisterner( 'load" ) pour que le code soit compatible chrome ?

    merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut
    J'ai finalement trouvé une solution , pas très élégante mais bon .

    le code qui est doit être utilisé une fois la page chargée , je l'ai collé dans un setTimout avec 20 secondes de délai d'attente et là ça fonctionne sous chrome !

    et surprise ça fonctionne "mieux" sous chrome que sous firefox .
    sous chrome : 60 fps
    sous firefox : 30 fps

    peut être parce que sous chrome il y a un support de vulkan ( dans about:flags mettre vulkan à enabled ) .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut
    finalement la solution avec setTimeout ( si ce n'est pas firefox ) fonctionne que dans certain cas , Si la personne à une connexion fibre ça passe mais du coup il attend un peu trop , si la personne à une connexion adsl 20 secondes ce n'est pas assez .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     window.addEventListener('load', (e) => {
     
    			 var navi=/^.*Firefox.*$/	
    			 if(navi.test(window.navigator.userAgent)){ init(); }
    			 else	{ setTimeout(init,20000);  }
                                                                        });

    du coup comme l'utilisation de l'évenement load ne fonctionne pas comme souhaité autant en créer un



    création d'un évenement ressourcechargee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     var ressourcechargee=new Event('ressourcechargee');
    dans le loader ( THREE.GLTFLoader() ) qui récupère un gros fichier il y a une fonction qui se déclenche quand le fichier est chargé , à la fin de cette fonction j'ajoute un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    window.dispatchEvent(ressourcechargee);
    et pour l'écoute .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     	var compteurRessourceChargee=0; 
     
    		   window.addEventListener('ressourcechargee', (e)  =>  {
    		        compteurRessourceChargee += 1;
    		        if ( compteurRessourceChargee === 6 ) { init();}	   
    		                                                                                                });
    6 car il y a 6 gros fichiers .



    Je ne sais pas si il y a mieux mais cette solution fonctionne sur firefox , chrome et edge et quelque soit le type de connexion .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction JS qui ne fonctionne pas sous Chrome
    Par hellsings dans le forum jQuery
    Réponses: 8
    Dernier message: 24/03/2012, 11h47
  2. Fonction de redirection ne fonctionne pas sous Chrome
    Par Azuken dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 22/02/2012, 11h13
  3. [MooTools] Effet slide qui ne fonctionne pas sous chrome
    Par micker dans le forum Bibliothèques & Frameworks
    Réponses: 24
    Dernier message: 29/06/2011, 17h12
  4. Editeur WYSIWYG fonctionne pas sous Chrome
    Par bunsky dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2011, 12h01
  5. window.history.forward() ne fonctionne pas sous FF
    Par khokho dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/01/2007, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo