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 :

CSS, iframe et editeur WYSIWYG


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut CSS, iframe et editeur WYSIWYG
    Petite question :

    J'ai une iframe pour un éditeur WYSIWYG (basé sur MIDAS, démo ici, le problème c'est que dans mon iframe j'ai pas la mise en forme de ma page mais celle standard (lien souligné en bleu, ...), comment appliquer la CSS de ma page à l'iframe?
    Directement via une proprieté de l'iframe? Via une commande javascript permetant d'appliquer une feuille de style à ma page (document.stylesheets, tenté sans succés)?
    Ou autre?

    J'ai également un autre problème, j'ai forcément un <br> quand je récupère la valeur de mon iframe, un moyen d'empécher ça ou je dois le supprimer quand je récupère sa valeur?

    (j'ai hésité à poster ça dans le forum html, css, ... mais vu que le code est principalement du js, je pense que la solution viendra du js)

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    la seule solution que j'ai trouvé est de créer une balise link à l''intérieur du head de l'iframe grâce au dom.

    l'url du css est absolue, mais les liens commençant par 'http://' restent en bleu (pas les autres).

    s'il y a plus simple je veux bien...

    +

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Oui ça c'est dans le cas où dans ton iframe tu as une page html non?

    Car là dans mon iframe j'ai pas de balise <head> ou <html> mais que du texte que j'édite comme je veux.

    L'iframe editable est utilisée comme un textarea dans lequel tu met en forme ton code sans passer par du BBCode ou autre.

    Je sais qu'il existe des solutions similaire comme FCKeditor mais je voudrais ne pas utiliser ce genre de machine à gaz. Et ce genre d'éditeur est utilisé ailleur (comme gmail) donc y'a certainement moyen... :-/

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    ton iframe est une page html.

    lorsque tu passe l'iframe en mode édition il y a des chance que tu place le code a l'intérieur du body de ton iframe.

    pour t'en convaincre jettes un coup d'oeil à l'aide de l'inspecteur dom

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Je vais regarder, mais pourquoi dans ce cas quand je récupére mon texte je n'ai pas les balises habiteuls d'une page html?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >pourquoi dans ce cas quand je récupére mon texte je n'ai pas les balises habiteuls d'une page html?

    parce qu'il y a des chances que tu récupères l'intérieur du body.

    files toujours ton code d'initialisation peut-être que tu procèdes différemment.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    j'utilise cette ligne :
    document.getElementById(idFrame).contentWindow.document.designMode = "on";

    Mais dans l'inspecteur DOM j'ai effectivement le HTML, HEAD et BODY, faut donc que je rajoute le LINK?

    (par contre dans le head j'ai ça :
    <HEAD>
    <TITLE>
    404 Not Found </TITLE>
    </HEAD>
    )

    Vais tester. Merci

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    pour ie vaut mieux insérer la balise link après le passage en designmode pour qu'il la garde.

    si tu connais pas regardes toujours ici :
    http://www.ibilab.net/webdev/article...g-bases-10.htm

    ps: si tu mets un src à ton iframe alors tu ne devrais pas en avoir besoin.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    J'ai fais des essais, mais en vain.

    Voilà mon code :
    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
    function Start(idFrame) {
     
      edoc = document.getElementById(idFrame).contentDocument
      if(edoc.designMode != 'On') edoc.designMode = 'On';
     
      if(!edoc.body)
      {
        setTimeout('Start('+idFrame+')',20);
      } 
      else 
      {
        edoc.body.innerHTML = "";
      }
     
     
      var doc = document.getElementById(idFrame).contentWindow.document;    
      var head = document.getElementsByTagName('head')[0];   
      var linkcss = document.createElement('link');   
     
      linkcss.href = "css/cssindex.php";
      linkcss.rel = "stylesheet";
      linkcss.type = "text/css";
     
      head.appendChild(linkcss);
    En utilisant Venkman comme debugger les infos sont bonnes, y'a même dans la variable doc déjà un lien vers la bonne feuille de style.

    Mais dans l'inspecteur DOM de Firefox je n'ai dans head qu'une balise title (404 en plus).

    Donc là je capte pas trop :-/ Mon code (pas encore nettoyé) me semble correct mais dans l'iframe j'ai toujours la mise en page par défaut du navigateur... et pas celle de ma CSS.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >dans l'inspecteur DOM de Firefox je n'ai dans head qu'une balise title (404 en plus).

    le head auquel tu ajoutes la balise n'est pas celui de ton iframe, mais celui de ta page principale...et vaut mieux mettre un chemin absolu pour la feuille de style.

    pour le 404 est ce que tu mets un src à l'iframe ?

    sinon voilà le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    edoc=document.getElementById(nom_editeur).contentDocument; //pour ff
    edoc=window.frames[nom_editeur].document; //pour ie
     
    //initialisation...
     
    var hd=edoc.documentElement.firstChild; //balise head de l'iframe
    var lnk=edoc.createElement("link");
     
    lnk.setAttribute('rel','stylesheet');
    lnk.setAttribute('type','text/css');
    lnk.setAttribute('href','http://toto.fr/style.css');
     
    hd.appendChild(lnk);

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Ca marche, merci!

    Et en effet je viens de voir mon erreur, arghhh la tête dans le guidon j'ai pas vu.

    Encore merci.

    (par contre mes liens restes bleus, mais le reste marche)

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Je reviens sur ce problème (désolé). Ca marche niquel sous Firefox cependant sous IE j'ai un problème, la CSS n'est pas appliquée à l'iframe, sauf si je met un alert juste avant le code.

    Donc je pense que ça vient du fait qu'il est nécessaire d'attendre pour certains navigateur, mais ce problème est normalement contourner avec setTimeout je pense.

    Voilà l'extrait de code :
    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
    function Start(idFrame, idTextarea) {	
     
      var edoc;
     
      if(IE)
      {
      	edoc = window.frames[idFrame].document; //pour ie
      }
      else
      {
      	edoc = document.getElementById(idFrame).contentDocument; //pour ff
      }
     
     
      if(edoc.designMode != 'On') edoc.designMode = 'On';
     
      //alert("---");
     
      if(!edoc.body)
      {
        setTimeout("Start("+idFrame+","+idTexarea+")",20);
      } 
      else 
      {
        edoc.body.innerHTML = document.getElementById(idTextarea).value;
      }
     
     
      //initialisation...
      var hd=edoc.documentElement.firstChild; //balise head de l'iframe
      var lnk=edoc.createElement("link");
     
     
      lnk.setAttribute('rel','stylesheet');
      lnk.setAttribute('type','text/css');
      lnk.setAttribute('href','http://www.metalorgie.com/metadmin/css/cssindex.php');
      hd.appendChild(lnk);
    Lorsque j'enléve le commentaire sur le alert() ça passe sous IE aussi. Quelqu'un aurait une idée?

    Merci.

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    essaies ça :

    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
     
    function Start(idFrame, idTextarea) {	
     
      var edoc;
     
      if(IE)
      {
      	edoc = window.frames[idFrame].document; //pour ie
      }
      else
      {
      	edoc = document.getElementById(idFrame).contentDocument; //pour ff
      }
     
     
      if(edoc.designMode != 'On') edoc.designMode = 'On';
     
      //alert("---");
     
      if(!edoc.body)
      {
        setTimeout("Start("+idFrame+","+idTexarea+")",20);
      } 
      else 
      {
        ajoute_css(edoc);
        edoc.body.innerHTML = document.getElementById(idTextarea).value;
      }
     
    function ajoute_css(edoc) {  
      var hd=edoc.documentElement.firstChild; //balise head de l'iframe
      var lnk=edoc.createElement("link");
     
      lnk.setAttribute('rel','stylesheet');
      lnk.setAttribute('type','text/css');
      lnk.setAttribute('href','http://www.metalorgie.com/metadmin/css/cssindex.php');
      hd.appendChild(lnk); 
    }
    avec les fonctions retardateurs le code qui suit l'appel est exécuté, en gros tu incluais toujours un css quelque soit la valeur de "edoc.body"....peut-être que ça peut perturber ie...

    ...et puis j'ajoute le css avant de remplir le body de l'iframe.

    +

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Non toujours le même problème.

    Sous Firefox ça marche, lorsque je tape du texte dès que l'iframe est dispo il n'est pas mis en forme mais l'est au bout de quelques secondes.

    Sous IE ça ne marche que si il y a un alert("");

  15. #15
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Je me permet de t'envoyer un mail pour demander un petit conseil.
    j'ai un calendrier (calendrier.htm) ou j'ai les réservations des chambres d'un hotel.
    Pour simuler :
    Donc le client sélectionne dans une liste de choix la chambre (1,2,3...) du fichier calendrier.htm,
    et je voudrais que ça actualise le calendrier.
    J'ai un fichier .js ou il y a les jour ou les chambres sont déja réservées.
    J'ai également un autre fichier (flato.htm) ou en fait j'aimerais réceptionner cet variable car c'est ce fichier qui va m'actualise le calendrier.
    Donc si par exemple dans le fichier flato.htm je met "var suite=1ou2ou3...;" ça marche, donc en fait il faudrait juste créer un code qui aprés la sélection de la chambre dans le calendrier.htm envoi automatiquement la variable pour indiquer le numero de suite.
    Dans mon fichier flato.htm je mets "var suite=variable reçu" pour que ça marche

    J'espere ne pas vous avoir embrouiller
    Je remercie par avance la bonne ame qui me depannerais

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    melhima> Créé un sujet tu auras plus de réponse.

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    le problème c'est que chez moi ça marche bien comme ça

    sinon t'es sûr de ton setTimeout(), je n'ai jamais réussi à le faire fonctionner avec cette syntaxe, j'utilise plutôt celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout(function() { Start(idFrame,idTextarea) },20);
    ps : j'ai enlevé le ajoute_css() en trop dans le post précedent.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par tthierry
    le problème c'est que chez moi ça marche bien comme ça

    sinon t'es sûr de ton setTimeout(), je n'ai jamais réussi à le faire fonctionner avec cette syntaxe, j'utilise plutôt celle ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setTimeout(function() { Start(idFrame,idTextarea) },20);
    ps : j'ai enlevé le ajoute_css() en trop dans le post précedent.
    Bah voilà c'était ça!

    Encore merci à toi

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    >Encore merci à toi

    bah, avec ton histoire d'alert ça m'a permis de résoudre un problème que j'avais sur un dev

    +

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Points : 37
    Points
    37
    Par défaut
    Eh eh, bah content d'être tout de même utile

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/09/2010, 22h17
  2. Editeur WYSIWYG récupération de variables
    Par frol dans le forum Flash
    Réponses: 3
    Dernier message: 13/08/2006, 11h01
  3. Editeur wysiwyg
    Par v4np13 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 29/04/2006, 00h42
  4. OpenOffice comme éditeur WYSIWYG de contenu XML ?
    Par lilouTwo dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 01/07/2004, 14h43

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