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

jQuery Discussion :

Vérifier la présence d'élément dans la src d'une iframe


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 19
    Points
    19
    Par défaut Vérifier la présence d'élément dans la src d'une iframe
    Bonjour,

    Pour éviter à l'utilisateur d'avoir à modifier les paramètres à la main, et pour lancer l'api YouTube afin de pouvoir stopper une video quand une autre est lancée, j'ai un script permettant d'ajouter des paramètres à l'adresse html de la vidéo.

    Le principal écueil étant que le 1er paramètre d'une src YouTube est précédé d'un "?" et les suivants d'un "&".
    Si l'utilisateur copie le code iframe YouTube brut = sans paramètre, mon script devra insérer des paramètres dont le 1er sera précédé par un "?".
    Au contraire si l'utilisateur fait quelques réglages dans l'interface d'intégration YouTube, l'adresse html de l'iframe YouTube comportera déjà un 1er paramètre avec un "?" et mon script devra insérer des paramètres dont le 1er sera précédé par un "&".

    J'essaye donc d'élaborer un commentaire conditionnel prévoyant les 2 situations et détectant la présence d'un "?" dans la src de l'iframe.
    J'ai trouvé ('iframe[src~="?"]') que j'essaye d'utliser, mais comme mes connaissances sont assez limitées ça ne donne pas l'effet voulu.
    Le cas exposé en dessous ignore le else.
    Les 2 autres essayés en commentaire ignorent le if.
    Il y a sûrement un problème de syntaxe mais lequel ?

    Merci d'avance pour toute suggestion !

    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
    jQuery(document).ready(function($) {
     
    $('iframe').each(function() {
     
    	var tubesrc = $(this).attr("src");
    	if ('$(this)[src~="?"]') {
    	//if ( $('this').is('iframe[src~="?"]') ) {
    	//if ( $('this')==('iframe[src~="?"]') ) {
     
      		$(this).attr("src", tubesrc + "&enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      		$(this).src += "&enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
     
    	} else {
     
      		$(this).attr("src", tubesrc + "?enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      		$(this).src += "?enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
     
     	}
    });
     
    });

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    tu peux faire un teste avec une regExp et ajouter les paramètres précédés de ? ou &.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src = src + ((/\?/).test(src) ? "&" : "?") + tes_parametres;

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 19
    Points
    19
    Par défaut
    Merci NoSmoking, de venir encore à mon secours.
    Grâce à toi je découvre les RegExp et l'opérateur conditionnel ternaire ?: que je ne connaissais pas.
    Cet opérateur remplace donc mon commentaire conditionnel if-else, mais tout ça est très nouveau pour moi et je ne sais pas trop où insérer ce code dans ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src = src + ((/\?/).test(src) ? "&" : "?") + "enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    Ce que je comprends : La source = la source testée + ("&" si elle comporte déjà un "?" ou "?" si elle n'en comporte pas) + l'ensemble de mes paramètre sans le 1er préfixe (qui sera ? ou &).
    Du coup, j'ai essayé d'en faire une variable pour modifier l'attribut src, mais sans succès.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('iframe').each(function() {
     
    var tubesrc = $(this).attr("src");
    newtubesrc = src + ((/\?/).test(src) ? "&" : "?") + "enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    	$(this).attr("src", tubesrc + newtubesrc);
     
    });
    Je n'arrive pas à trouver mon erreur, raisonnement ou syntaxe, en tout cas ça ne donne rien tel quel…

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 19
    Points
    19
    Par défaut
    Du coup, je suis repartie sur mon ancienne structure conditionnelle, c'est sûrement plus redondant qu'avec ?: mais ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $('iframe').each(function() {
     
    var tubesrc = $(this).attr("src");
    	toto = (/\?/).test(tubesrc);
    	if (toto === true) {
    		$(this).attr("src", tubesrc + "&enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      		$(this).src += "&enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";		
    	} else {
    		$(this).attr("src", tubesrc + "?enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      		$(this).src += "?enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    	}
     
    });
    Mais si tu as 3mn pour me dire comment j'aurais dû tourner ma fonction avec ta méthode, ça m'intéresse !
    Merci encore…

  5. #5
    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 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 637
    Points : 66 658
    Points
    66 658
    Billets dans le blog
    1
    Par défaut
    Petite remarque d'optimisation sur ton code ...

    La seule chose qui change dans ton ajout à l'url c'est & ou ?
    du coup pourquoi faire l'ajout de la chaine complète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $('iframe').each(function() {
            var tubesrc = $(this).attr("src");
    	add= ((/\?/).test(tubesrc) === true)?"&":"?";
           	$(this).attr("src", tubesrc + "&enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      	$(this).src += add+"enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ou add= (tubesrc.indexOf('?')>-1)?"&":"?";
    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 !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 19
    Points
    19
    Par défaut
    Merci SpaceFrog !
    Justement je ne savais pas trop comment tourner ma fonction pour la raccourcir !
    Ceci-dit, il manquait l'ajout de la variable add dans l'avant-dernière ligne de ton code, du coup au final ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var tubesrc = $(this).attr("src");
    add = ((/\?/).test(tubesrc) === true)?"&":"?";
           	$(this).attr("src", tubesrc + add + "enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3"); 
      	$(this).src += add +"enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    Mais finalement la dernière ligne est un doublon, j'avais trouvé le code de base comme ça (pour lancer l'api YT) et je me demande si c'est pour une éventuelle incompatibilité de certains navigateurs avec le sélecteur d'attribut .attr ?

  7. #7
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Justement je ne savais pas trop comment tourner ma fonction pour la raccourcir !
    Ben en utilisant le code que je t'ai fourni puisque tu en as compris le sens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var src = $(this).attr("src")
    var params = "enablejsapi=1&showinfo=0&rel=0&iv_load_policy=3";
    src = src + ((/\?/).test(src) ? "&" : "?") + params;
    $(this).attr("src", src);

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 50
    Points : 19
    Points
    19
    Par défaut
    Hello NoSmoking,
    Ça n'était pas un reproche, j'ai essayé d'utiliser ton code et je me suis embrouillé les pédales avec les variables.
    Du coup je suis repartie en terrain connu avec une structure plus lourde.
    Les nouvelles connaissances demandent un peu de pratique, et là c'était un peu trop neuf pour moi.
    Mais maintenant je comprends mieux grâce à vous 2.
    Merci encore !

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

Discussions similaires

  1. Récupérer variable POST dans le src d'une iframe
    Par claude77 dans le forum Langage
    Réponses: 13
    Dernier message: 04/03/2014, 16h53
  2. Réponses: 2
    Dernier message: 05/05/2012, 01h57
  3. Réponses: 3
    Dernier message: 18/09/2009, 12h41
  4. Réponses: 1
    Dernier message: 15/01/2009, 12h24
  5. Réponses: 18
    Dernier message: 21/08/2007, 10h57

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