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 :

Comment faire ?(impossible à formuler sans un exemple)


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut Comment faire ?(impossible à formuler sans un exemple)
    Bonjour à tous,

    Après plusieurs tentatives échouées je me dis que le plus simple est de commencer mon explication par un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <script priority="1" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" > </script>
    <script priority="2" type="text/javascript" src="https://serveurDansLeReseau/libs/jquery-ui.min.js" > </script>
    L'attribut "priority" n'existe pas par contre il me permet d'exprimer ce que je voudrais arriver à faire.
    En gros l'idée serait de pouvoir lire une librairie depuis le site google pour alléger le trafic réseau, mais si la connexion internet du client ne fonctionne pas, switcher vers une lecture de la librairie depuis un emplacement sur le réseau.

    Est-ce possible et comment faire ?

    Merci à tous pour vos lumières

  2. #2
    Invité
    Invité(e)
    Par défaut
    tu cree une variable apres le chargement de la page tu fait un teste de cette variable si elle existe c'est que le fichier a ete charge si ce n'est pas le cas il suffira de modifier le src de la balise script

  3. #3
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut suggestion de titre ^^
    Citation Envoyé par ToniConti Voir le message
    Comment faire ?(impossible à formuler sans un exemple)
    "Comment faire pour accéder dynamiquement à un script externe ?"

    ---

    Autre chose : as-tu anticipé le problème de Same Origin Policy ? (le fait que l'accès à un domaine différent ne puisse se faire que par l'intermédiaire de ton serveur)

    >>> en tout cas a priori il me semble que le choix du script devrait se faire soit à la génération de la page, soit par ajax, mais de toutes façons côté serveur... non ? ^^

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Par défaut
    Salut jai un debut de solution peut-etre,

    voici le code :

    javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    	<script language="javascript" type="text/javascript" >
    		var xmlHttpReq = false;
    		if (window.XMLHttpRequest) {
    			xmlHttpReq = new XMLHttpRequest();
    		}
    		else if (window.ActiveXObject) {
     
    			xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    		}
     
    		function addJS(file,i){
    			length = file.length
     
    			var cfile = file[i]
     
    			self.xmlHttpReq.open('POST', 'detectFile.php', true);
    			self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    			self.xmlHttpReq.onreadystatechange = function() {
    				if (self.xmlHttpReq.readyState == 4) {
    					if(self.xmlHttpReq.responseText == 'true'){
     
    						 creerJStag(cfile)
    					}else{
    						if(i<length){
     
    							addJS(file,i+1);
    						}else{
     
     
    						}
    					}
    				}
    			}
    			self.xmlHttpReq.send('file='+cfile);
    			return false;
    		}
     
    		function monCallback(){
    			alert($('body'));						 
    		}
     
    		function creerJStag(src){
    		 var baliseHead = document.getElementsByTagName("head")[0];
    		  var nouveauScript=document.createElement('script')
    		  nouveauScript.setAttribute("language","javascript")
    		  nouveauScript.setAttribute("type","text/javascript")
    		  nouveauScript.setAttribute("onLoad","monCallback()")
    		  nouveauScript.setAttribute("id","script")
    		  nouveauScript.setAttribute("src", src)
    		  nouveauScript.onLoad = monCallback
    		  baliseHead.appendChild(nouveauScript)
     
    		}
     
    		addJS(['ddd','https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],0);
     
    </script>
    le php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
     
     
    $contenue = @file_get_contents($_POST['file']);
     
    if(empty($contenue)){
    	echo 'false';
    	die();
    }
     
    $response = '';
     
    foreach($http_response_header as $v){
    	$response .= $v	;
    }
     
    if(!preg_match('#javascript#',$response)){
    	echo 'false';
    	die();
    }
    	echo 'true';
     
    ?>
    explication :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addJS(['ddd','https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],0);
    on envoie 2 parametre, un array contenant la liste de js a charger, et 0 qui ca servir d'iterateur pour la recursivite

    addJS() va en boucle effectuer une requete ajax vers le script php. le script php detecte si le fichier existe et si cest du javascrip, il renvoie 'true' ou 'false';

    addJS() va donc passer a travers sont array recu en parametre jusqua ce quil trouve le fichier correspondant, une foi trouver il va executer creerJStag()

    creerJStag() recoit comme parametre le src du fichier Js et creer une balise et la place dans le head

    si tu regardes dans l'attribut onLoad, je met un callback, cela sert a m'assurer que le js est charger avant de l'utiliser.

    Bon jai fait ca vite pour le fun, si javais a utiliser ce script jaurais un bon travail doptimisation a faire. Ce n'est donc pas la version la optimal qui soit.

    note : je n'ai tester que sous ff 3.6

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    joli exemple bravo

    @ToniConti : tu as besoin d'avoir la compatibilité IE6 ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juillet 2010
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 96
    Par défaut
    Oui meme si l'exemple peut marché en théorie je réitére de pas l'utiliser,

    apres 2-3 test, je m'appercoit que le temps de reponse dans onreadystatechange de mon httprequest est vraiment trop long et prive lutilisateur de $(window).ready et . onLoad...

    et aussi, le php utiliser dans lexemple à lui seul suffit. mais comment la question etait si ca se fait en javascript jme suis amuser un peu.

    Je me demande tout de meme sans requete ajax si cest fesable car jarrive a recuper quand quand le script est charger en assigant un callback a onLoad mais je ne peux pas savoir si le script est inchargeable.

    peut etre mettre un while qui attend le onload pendant un lapse de temp et passer au prochain js si il se passe rien, mais sa limplique encore de faire attendre le bon déroulement du script pour donner suite et gruger du temps de loading de lutilisateur.

    donc a moi davis contraire Je prétend que la seul bonne facon est avec un script serveur

  7. #7
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    >>> en tout cas a priori il me semble que le choix du script devrait se faire soit à la génération de la page, soit par ajax, mais de toutes façons côté serveur... non ? ^^
    Citation Envoyé par nault Voir le message
    donc a moi davis contraire Je prétend que la seul bonne facon est avec un script serveur
    On est donc bien d'accord

    Toni ? quel est ton langage serveur actuel ? (si tu en utilises déjà un ici bien sûr ^^)

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Mai 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 345
    Par défaut
    Si tu héberge ton site il doit être lui-même capable d'héberger ses fichiers JS.
    C'est jolie que google propose un hébergement des fichiers, mais du coup tu es dépendant d'un tiers sur un service "gratuit" et comme il est gratuit google peut couper à tout moment les JS.

    Personnellement je préfère ne faire confiance à moi même et si j'ai un gros site je passe par une solution de CDN via akamai par exemple. En tout cas je ne ferai pas confiance à un site gratuit. Et sinon le reste, reste du bricolage.

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    alt ne fonctionne pas sur une balise script ? vu que c'est un src...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  10. #10
    Membre éclairé Avatar de ToniConti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2009
    Messages : 245
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses, je me rend compte que c'est pas si simple que ça !
    Je ne suis encore que novice en programmation internet...

    Je vais tenter de répondre à vos questions :

    @ToniConti : tu as besoin d'avoir la compatibilité IE6 ?
    Firefox suffira nos utilisateurs sont de toutes façon obligés d'utiliser Firefox ^^

    Toni ? quel est ton langage serveur actuel ?
    Caché (InterSystem Caché)

    as-tu anticipé le problème de Same Origin Policy ?
    Non je n'imaginais pas que ce problème existait ^^

    En tout cas je ne ferai pas confiance à un site gratuit.
    Attention c'est pas tout à fait une hébergement gratuis tel qu'on peut s'y attendre c'est plutot des api que google héberge de manière publique je pense que c'est déjà un peu plus stable quand même ^^ d'ailleurs avec ce post j'espère pouvoir anticiper les éventuelles interruptions de service côté toile

    -------------------------------------

    Il y a peut être une information qui pourrait aider (et qui sait simplifier le problème ^^) c'est que les scripts en question sont les librairies JQuery suivantes ainsi qu'une page css :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"> </script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js"> </script>
    <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/themes/smoothness/jquery-ui.css" type="text/css" />
    Donc a priori il faudrait que je vérifie si les trois fichiers ont été chargés, si pas faire le nécessaire pour les charger depuis un emplacement réseaux.
    Je vais tenter d'implémenter les solutions proposées mais si vous avez d'autres suggestions je suis preneur

    Encore merci pour vos réponses,
    Bonne journée à tous

Discussions similaires

  1. comment faire la conversion sans perdre d info
    Par tarikmahf dans le forum Langage
    Réponses: 3
    Dernier message: 14/03/2008, 11h35
  2. Comment faire un Iframe sans la barre horizontale ?
    Par Alexandrebox dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/04/2007, 23h16
  3. Réponses: 4
    Dernier message: 28/07/2006, 11h26
  4. Réponses: 14
    Dernier message: 27/07/2006, 14h40
  5. [Message] Comment faire un prompteur sans bruit
    Par Kylen dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 26/08/2005, 11h15

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