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 :

Tester l'existence d'un fichier avec XMLHttpRequest


Sujet :

JavaScript

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut Tester l'existence d'un fichier avec XMLHttpRequest
    Bonjour,

    Pour tester l'existence d'un graphique (svg ou swf), j'utilise la fonction que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Teste l'existence du graphique à charger
    function test_exist_graph(filename) {
     
        try {
        var objXMLHTTP = new XMLHttpRequest();
        objXMLHTTP.open("GET", filename, false);
        objXMLHTTP.send(null);
        //on teste l'existence du fichier sur le code status retourné (404 = not found)
        return (!(objXMLHTTP.status == 404));
        } catch (e) {alert(e.message + "\n" + e.reason);}
    }
    Cette fonction marche très sous FF et IE sur la version web de mon appli (catalogue en ligne). Par contre, sur la version CD (locale), IE me retourne undefined que le fichier soit présent ou non..

    l'alert du catch(e) me renvoie : Accès refusé - undefined..

    Du coup mon test échoue quoi qu'il arrive.

    Sauriez-vous d'où vient l'erreur ?

  2. #2
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Réponse B, Jean-Pierre : Cross-Domain !
    Et c'est mon dernier mot.

    Ton CD n'est pas sur le domaine du fichier à tester. That's the problem guy !
    La méthode détournée de passer par un proxy PHP ne fonctionnera pas, à moins que ta machine joue les Apache nativement..

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    je n'ai pas tout compris à ta réponse

    par contre, le fichier que je cherche à charger est dans le même dossier que l'ensemble des pages du sites. le chemin demandé est du type "./graph/xxxxxx.svg"

  4. #4
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Ta page appelante est sur ton lecteur CD G: par exemple.
    Hors ton site et le fichier appelé est sur http://www.toto.com
    La différence te saute pas aux yeux ?
    Ce n'est pas le même domaine. IE bloque jusqu'à présent les requêtes XmlHttpRequest entre des domaines différents appelant/appelé : le cross-domain.

    Essaye le paramètre suivant mais je doute que ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserAccess');

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    netscape est indéfini sous IE..

    merci pour ton aide, je crois que je vais me tourner vers un FileSystemObject pour IE..

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Pour info, j'ai codé la fonction comme suit pour la version locale :
    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
    // Teste l'existence du graphique à charger
    function test_exist_graph(filename) {
     
        try {
            if (ie5) {
                //Récupération du chemin absolu du site
                var rootPass = new String(window.location);
                //On enlève le nom de la âge index (RSentree.htm = 12 char)
                var gapSlice = rootPass.length - 12;
                rootPass = rootPass.substring(8,gapSlice);
     
                //on vire le point au début de filename
                filename = new String(filename);
                filename = filename.substring(2);
     
                //on concatène le path et le nom du graphe
                //filename = rootPass + filename;
                filename = unescape(rootPass + filename);
     
                var fso = new ActiveXObject("Scripting.FileSystemObject");
                var test = fso.FileExists(filename);
                return test;
            }    
            else {
                var objXMLHTTP = new XMLHttpRequest();
                objXMLHTTP.open("GET", filename, false);
                objXMLHTTP.send(null);
                //on teste l'existence du fichier sur le code status retourné (404 = not found)
                return (!(objXMLHTTP.status == 404));
            }    
        } catch (e) {/*alert(e.message + "\n" + e.reason);*/}
    }
    Merci d-Rek pour la leçon sur le cross domain, je crois avoir bien compris là

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Vu que l'utilisation du FSO provoqie une alerte de sécurité, que ce n'est pas très "user friendly" et que le user en l'occurence, on aimerait bien en faire un client.. j'ai du m'adapter et trouver une autre solution sous IE...

    Et après avoir bien galéré, j'ai essayé de déclarer un ActiveXObject("Microsoft.XMLHTTP") à la place du XMLHttpRequest... et ça marche, il trouve tout seul mon fichier à partir de la racine du site

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

Discussions similaires

  1. Tester l'existence d'un fichier avec fso (Scripting.FileSystemObject)
    Par lpnc3po dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 04/01/2015, 22h08
  2. [File]Tester l'existence d'un fichier
    Par florantine dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 23/11/2005, 10h45
  3. Tester l'existence d'une table avec une requête
    Par Oluha dans le forum Access
    Réponses: 6
    Dernier message: 29/08/2005, 09h45
  4. tester l existence d un fichier sous turbo pascal
    Par Newllite dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 25/01/2004, 12h47
  5. Peut on tester l'existence d'un fichier ?
    Par Alamassepointcom dans le forum Flash
    Réponses: 2
    Dernier message: 10/10/2002, 12h10

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