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 :

Affichage d'une div (pop up) sur un frameset


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 136
    Points : 69
    Points
    69
    Par défaut Affichage d'une div (pop up) sur un frameset
    Helloooo

    Je cale sur un petit souci.

    Le site est composé d'un frameset (oui, je sais, pas bien, faut plus le faire, mais personne n'explique précisément la raison technique à part en disant "C'est pas sécure"... Je ne vois pas trop de ce qu'il y a de pas sécure d'afficher 2 pages dans une mais bon, ce n’est pas le sujet ) avec un frame en haut dans lequel il y a le player (webradio) et en dessous un frame pour afficher les divers éléments (playlist, disques à la demande, tchat ...) sans couper le son (rechargement de page) entre les pages.

    Pour une fonction spécifique aux admins du site (le propriétaire de la radio et moi même), j'utilise une div sur la page top , afin de pouvoir afficher un pop up pour corriger les tags artiste et titre en direct si il y a une erreur.
    Donc, juste au début du body, voici la div (provenant de https://html-online.com/articles/simple-popup-box/ et adapté à mon besoin) :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div id="bubul"  class="hover_bkgr_fricc" style="display:none;" onclick="showDivbubul();">
    	<span class="helper"></span>
    	<div>
    		<p><div id="messagebubul" class="messagebubul" ></div></p>
    	</div>
    </div>

    Le style :
    Code CSS : 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
    /* Popup box BEGIN */
     
    div.bubul {
        background:rgba(255,0,0,1);
    }
     
    div.messagebubul {
    	cursor: context-menu;
    	color: #000000;
    	font-family: Verdana, sans-serif; 
    	font-style: italic;
    	font-weight: bold;
    	font-size: 110%;
    }
    .hover_bkgr_fricc{
    	cursor: default;
        background:rgba(0,0,0,0);
        display:none;
        height:100%;
        position:fixed;
        text-align:center;
        top:0;
        width:100%;
        z-index:10000;
    }
    .hover_bkgr_fricc .helper{
        display:inline-block;
        height:100%;
        vertical-align:middle;
    }
    .hover_bkgr_fricc > div {
        background-color: #fff;
        box-shadow: 10px 10px 50px #555;
        display: inline-block;
        height: auto;
        max-width: 60%;
        min-height: 20px;
        vertical-align: middle;
        min-width: 150px;
        position: relative;
        border-radius: 8px;
        padding: 10px 50px 10px 50px; /* Haut Droite Bas  */
    }
     
    /* Popup box END */

    Code dans la balise script :
    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
    		$('#bubul').bind('click touch', function(event) {
    		document.getElementById("bubul").style.display = 'none';
    		});
     
    		$('#messagebubul').bind('click touch', function(event) {
    			event.stopPropagation();
    		});
     
     
        function showDivbubul(id){
            if(document.getElementById("bubul").style.display == 'none' ) {
     
    		$.ajax({
    		type: 'POST',
    		url: './acp/retaglive.php',
    		data: { id: id },
    		success: function(data){
    		$("#messagebubul").html('');
    		$("#messagebubul").append(data);
    		}	
    		});	
     
                document.getElementById("bubul").style.display = 'inline';
    		}
    	}
    Puis je déclenche la fonction showDivbubul() par un onClick à l'endroit souhaité.

    Ca marche très bien mais le pop up est centrée sur la page du frame d'en haut (ce qui est logique).
    Pour une autre fonction (modification de la pochette du disque) ,je souhaiterais que ce pop up soit affiché centrée sur l'écran (enfin fenêtre du navigateur) et non celle du frame top.

    Évidement, j’ai essayé en mettant la div avant le frameset de la page index, et en rajoutant des window.parent (ou autres combinaisons testées) devant les document.getElementById etc etc, mais rien n'y fait, je ne suis pas parvenu à afficher le pop up .

    Si quelqu'un à une idée je serais preneur

    Merci et bon ouiK

    Couin

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Il n'est peut-être effectivement pas possible d'afficher une balise div par dessus une balise frameset en ayant les deux dans la même arborescence.
    Une solution serait de créer un nouveau fichier "index.html" avec dedans la balise div et une balise iframe affichée sur toute la page et ayant pour src le fichier html contenant le frameset.

    Citation Envoyé par Couin Voir le message
    oui, ..., faut plus le faire
    Oui, faut plus le faire.
    Autant utiliser une iframe.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1-
    ... en disant "C'est pas sécure"...
    Là n'est pas le problème : <frameset> est obsolète et en cours d'éradication (!).

    Obsolète
    Cette fonctionnalité a été supprimée des standards du Web.
    Bien que quelques navigateurs puissent encore la supporter, elle est en cours d'éradication.
    Ne l'utilisez ni dans d'anciens projets, ni dans de nouveaux.
    Les pages et applications Web l'utilisant peuvent cesser de fonctionner à tout moment.

    2- Concernant la popup
    Les <frame> (les <iframe> aussi) sont des "fenêtres sur l'extérieur".
    RIEN de ce qui vient de l'"extérieur" ne peut pas dépasser de la fenêtre.
    Ça vaut pour une popup, qui peut s'afficher dans le cadre de la fenêtre mais pas au-delà.


    3- Avec la problématique posée "musique en continu, même au changement de page", je pense qu'on peut s'en sortir avec :
    • une seule page
    • et Ajax

    il me semble qu'on peut utiliser Ajax sur les lien <a> et formulaire <form>, pour "recharger partiellement" la page.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <section id="musicplayer">
    ...
    </section>
    <section id="maincontain">
    ...
    </section>
    En jQuery, on ciblera alors :
    • $('#musicplayer') : le player
    • $('#maincontain') : playlist,...
    Dernière modification par Invité ; 31/08/2019 à 12h28.

  4. #4
    Membre du Club Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 136
    Points : 69
    Points
    69
    Par défaut
    Hellooo !

    Merci pour vos réponses
    Même si entre temps j'ai fais autrement (vu que c'est que pour les admins, l’édition de la pochette en cours ou des 5 musiques précédentes se fait en ouvrant une nouvelle fenêtre via un window.open .

    Les frames obsolètes, super , aucune raison technique exposé dans l'article :/ Vois bien le truc, comme ça ça oblige à refaire les sites et donc les $$$$ qui seront dépensé pour ceux qui savent pas ou n'ont pas le temps de faire eux même
    Comme pour mysql viré dans PHP7

    Les <frame> (les <iframe> aussi) sont des "fenêtres sur l'extérieur".
    RIEN de ce qui vient de l'"extérieur" ne peut pas dépasser de la fenêtre.
    Pour le coup je pense ne pas être d'accord, car j'avais mis fut un temps, une fonction qui permettait d'afficher sur le display du topper, l'artiste et le titre de la musique dont on cliquait sur la pochette dans les "recent tracks" (donc autre frame).

    Pour les sections, je connaissais pas, ça peut être en effet intéressant à étudier pour une prochaine mouture du site.

    Bonne soirée

  5. #5
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Citation Envoyé par Couin Voir le message
    Les frames obsolètes, super , aucune raison technique exposé dans l'article
    Il y a de nombreux sites/blogs/forums qui en parlent en détail.
    Les documents sur le sujet ont souvent plus de 10 ou 15 ans, voire plus.

    Citation Envoyé par Couin Voir le message
    Vois bien le truc, comme ça ça oblige à refaire les sites et donc les $$$$ qui seront dépensé pour ceux qui savent pas ou n'ont pas le temps de faire eux même
    Il y a généralement une longue période de transition permettant aux gens de prendre leurs dispositions.

    Citation Envoyé par Couin Voir le message
    Comme pour mysql viré dans PHP7
    De même, il y a eu une période de transition raisonnable.
    Encore maintenant, je suppose que beaucoup d'hébergements des sites concernés n'imposent pas une migration vers PHP7.

    Citation Envoyé par Couin Voir le message
    Pour le coup je pense ne pas être d'accord, car j'avais mis fut un temps, une fonction qui permettait d'afficher sur le display du topper, l'artiste et le titre de la musique dont on cliquait sur la pochette dans les "recent tracks" (donc autre frame).
    Je pense que jreaux62 voulait dire qu'un élément dans une frame / iframe ne peut pas sortir du cadre.

    Si j'ai bien analysé : à la différence de l'iframe, la problématique avec la balise frameset, c'est qu'on ne peut pas afficher un élément de la même arborescence par dessus car il ne peut rien y avoir d'autre que le frameset qui n'est en réalité pas intégré dans un body, mais le remplace carrément.

    Comme je disais, pour afficher quelque chose par dessus le frameset, on peut ajouter un niveau de fichier supplémentaire :
    "index.html" qui contient une iframe qui cible le fichier du frameset.
    Dans "index.html", on pourra alors avoir une balise div pouvant être affichée par dessus le frameset.

    Mais sinon, comme je le disais également, je pense qu'il y a moyen de remplacer assez facilement le frameset par des iframe.

    Dans l'immédiat, c'est très bien si window.open convient.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/06/2019, 16h34
  2. Affichage d'une div cachée en cliquant sur un lien
    Par anas.bah dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/03/2009, 20h38
  3. [POO] erreur objet attendu sur affichage d'une <DIV>
    Par bilou95 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 03/12/2008, 12h26
  4. [Visual Web] Affichage d'une liste d'objets sur SJSC
    Par Ashen-Shugar dans le forum NetBeans
    Réponses: 4
    Dernier message: 28/05/2006, 20h16

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