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 si le client peut ouvrir une URL


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut Tester si le client peut ouvrir une URL
    Bonjour,
    J'aimerais savoir si il est possible, en javascript, de tester si le client peut ouvrir une url (typiquement, pour savoir si le port xxxx de son réseau est ouvert en sortie, en testant une url genre http://ip:port ).
    Bref, un équivalent d'un fopen, mais côté client.

    Merci bien

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    A priori j'ai réussi à le faire, avec AJAX, ce qui m'étonne car il me semblait que ça s'exécutait côté serveur

    EDIT: non, finalement, marche pas... me semblait bien

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Par défaut
    différent port == différent domaines. Sauf si la sécurité n'est pas mis, il n'y a pas de moyen!

  4. #4
    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
    mets un iframe caché sur ta page et attribues lui le src de l'url ...
    teste ensuite le src de l'iframe ?
    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 !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Citation Envoyé par Matthieu2000 Voir le message
    différent port == différent domaines. Sauf si la sécurité n'est pas mis, il n'y a pas de moyen!
    En effet, ça pourrait fonctionner en diminuant la sécurité de la zone, mais d'une part je peux pas demander aux clients de faire ça, d'autre part ça n'est effectif que sur le port 80 d'après mes quelques tests.
    Citation Envoyé par SpaceFrog
    mets un iframe caché sur ta page et attribues lui le src de l'url ...
    teste ensuite le src de l'iframe ?
    Une idée intéressante en effet... mais comment tester le src de l'iframe ?
    Le javascript et moi....

    En fait j'avais déjà pensé à cette idée, et j'avais mis une petite iframe (genre 50 * 50 ) avec la page, qui a un fond noir.
    Vous voyez du noir: ça marche
    Vous voyez du blanc: ça marche pas

    Pas très user-friendly

  6. #6
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    Si tu peux répondre sur un serveur web sur tous les ports que tu veux tester
    alors tu peux imaginer de servir une même image quelque soit le port
    sur lequel est adressé la requête. Dés lors en javascript tu peux détecter
    si l'image est chargée ou pas avec un code du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var img = document.createElement('img');
    var timeout = setTimeout( function() { alert('ça passe pas'); }, 5000);
    img.onload = function() { clearTimeout(timeout); alert('ça passe'); };
    img.src = 'http://domain:port/image.gif';
    document.body.appendChild(img);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Aie, malheureusement il n'y a pas d'image dans cette page, et je n'ai pas la main dessus.
    C'est l'interface web d'un serveur shoutcast, de ce style là:
    http://91.121.165.51:7150/
    C'est que du texte.
    Peut-on vérifier avec ce même type de code que du texte est bien "chargé" ?
    Par exemple "<a href="http://www.shoutcast.com/disclaimer.phtml">Copyright Nullsoft Inc</a>"

  8. #8
    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
    pas coté client...
    eventuellement en passant par un fichier php avec ajax tu peux parser le contenu de la page avec php
    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 !

  9. #9
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var e = document.createElement('iframe');
    var timeout = setTimeout( function() { alert('ça passe pas'); }, 5000);
    e.onload = function() { clearTimeout(timeout); alert('ça passe'); };
    e.src = 'http://91.121.165.51:7151/';
    document.body.appendChild(e);

  10. #10
    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
    j'ai peur que le src en fait conserve la valeur de depart ...

    il aurait fallu pouvoir atteindre le location.href ...
    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 !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Je suis pas bien certain de savoir comment utiliser ce code.
    Si je le mets en début de page, après le <body> là j'ai la page avec l'iframe, et après 5 secondes "ça passe pas" (donc mauvais résultat puisque je vois bien l'iframe)
    Si je mets ce code en fin de page, avant le </body>, j'ai une alerte IE (ne peut pas ouvrir la page, opération abandonnée)

    Pour info je l'ai copié tel quel, en adaptant juste l'url.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script>
    var e = document.createElement('iframe');
    var timeout = setTimeout( function() { alert('ça passe pas'); }, 5000);
    e.onload = function() { clearTimeout(timeout); alert('ça passe'); };
    e.src = 'http://<?=$IPserveur?>:<?=$PortServeur?>/';
    document.body.appendChild(e);
    </script>

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    En revanche sur Firefox les résultats sont bons !

    Encore une mauvaise blague de IE

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Donc j'en suis rendu là...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script language="JavaScript">
    var e = document.createElement('iframe');
    var timeout = setTimeout( function() { document.getElementById('informations').innerHTML = 'Le port <?=$PortServeur?> semble fermé dans votre réseau.' ; }, 5000);
    e.onload = function() { clearTimeout(timeout); document.getElementById('informations').innerHTML = 'Port ouvert' };
    e.width = 0 ;
    e.height = 0 ;
    e.src = 'http://<?=$IPserveur?>:<?=$PortServeur?>/';
    document.body.appendChild(e);
    </script>
    Fonctionne impec sur firefox, mais pas IE.
    Je suis pas du tout familiarisé avec javascript alors il y a peut-être une incompatibilité évidente qui saute aux yeux, mais moi je vois rien...
    C'est presque fini, j'aimerais bien me débarrasser de cette histoire

  14. #14
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    en fait le problème c'est que mon code accède au body de la page
    et que celui-ci doit être existant avant que le javascript ne soit
    exécuté.

    Je m'excuse d'avoir omis que tu débutais en Js, alors place ce code
    dans une fonction et appelle et assigne l'évènement onload à celle-ci.

    comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    window.onload = function() {
    ...le code ici
    };
    et tu met ça dans <script> dans le head quelque part.

    Si par hasard il y a déjà un onload dans ta balise body alors je t'expliquerai
    volontiers comment gérer ça, mais si c'est pas le cas, c'est très simple ainsi.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Alors effectivement j'ai déjà du javascript dans le body

    Donc j'ai fait ceci:
    dans le <head>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function testport() {
    		var e = document.createElement('iframe');
    		var timeout = setTimeout( function() { document.getElementById('informations').innerHTML = 'Le port <?=$PortServeur?> semble fermé dans votre réseau.' ; }, 5000);
    		e.onload = function() { clearTimeout(timeout); document.getElementById('informations').innerHTML = 'Port ouvert' };
    		e.width = 0 ;
    		e.height = 0 ;
    		e.src = 'http://<?=$IPserveur?>:<?=$PortServeur?>/';
    		document.body.appendChild(e);
    }
    et la balise body
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <BODY onLoad="titre('<?=$IPserveur?>','<?=$PortServeur?>');testport()">
    (l'autre fonction appelée "titre" fonctionne bien )


    Résultat: pas de mieux, c'est toujours impeccable sur firefox (je bloque le port avec mon firewall, je débloque, nickel...)
    Mais toujours "port fermé" sur IE

    A tout hasard j'ai également essayé ceci, mais ça revient exactement à la même chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    window.onload = function() {
    		var e = document.createElement('iframe');
    		var timeout = setTimeout( function() { document.getElementById('informations').innerHTML = 'Le port <?=$PortServeur?> semble fermé dans votre réseau.' ; }, 5000);
    		e.onload = function() { clearTimeout(timeout); document.getElementById('informations').innerHTML = 'Port ouvert' };
    		e.width = 0 ;
    		e.height = 0 ;
    		e.src = 'http://<?=$IPserveur?>:<?=$PortServeur?>/';
    		document.body.appendChild(e);
    		titre('<?=$IPserveur?>','<?=$PortServeur?>');
    }
    Et rien dans le <body>

  16. #16
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Citation Envoyé par AIexis Voir le message
    Et rien dans le <body>
    Tu veux dire que l'iframe n'apparait pas dans le body sous IE ?

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    Ah non, pardon, je me suis mal exprimé. Je voulais dire que j'avais laissé la balise body sans onLoad.
    L'iframe apparait bien (quand je mets width et height >0 of course) sur firefox et IE.
    Mais IE ne semble pas s'en apercevoir.

  18. #18
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Après une petite recherche, il semblerai qu'IE aie un bug à ce niveau,
    regarde ici

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 103
    Par défaut
    C'est bien ma veine, pour une fois que j'ai besoin de JS

    Parmi les réponses, dans ce forum mis en lien, il semblerait que des gens aient pu contourner le problème, non ?
    Je suis largué là, désolé

  20. #20
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Je pense qu'il te faut essayer de coder le onload dans le html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <iframe src='...' onload='loaded()' />
    ensuite en javascript tu modifie ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var timeout; // ceci en dehors de toute fonction
     
    function loaded() {
      clearTimeout(timeout); alert('ça passe');
    }
     
    // tu peux mettre ceci dans ta fonction body onload
    timeout = setTimeout( function() { alert('ça passe pas'); }, 5000);

Discussions similaires

  1. Ouvrir une URL avec fopen
    Par dragonspyro93 dans le forum Langage
    Réponses: 2
    Dernier message: 12/01/2007, 23h20
  2. [Système] Ouvrir une URL
    Par benthebest dans le forum Langage
    Réponses: 37
    Dernier message: 27/08/2006, 23h41
  3. [ASP] Ouvrir une url
    Par castaka dans le forum ASP
    Réponses: 2
    Dernier message: 04/08/2005, 11h02
  4. Ouvrir une URL en C/C++ sous Win32
    Par pykoon dans le forum MFC
    Réponses: 7
    Dernier message: 26/04/2005, 09h08

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