.selectionStart dans un Iframe

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 5 avril 2007 à 13:16
 cs_kenzaar - 14 févr. 2011 à 14:15
Bonjour à toutes et à tous,

je ne parviens pas à utiliser .selection??? dans un iframe ( avec FF/M-Meleon... donc )

 
 <script type="text/javascript">
    var Fen,Champ;
    function init()
    {
        Fen=document.getElementById('saisie').contentWindow;
        Champ=document.getElementById('saisie').contentDocument;
        Champ.designMode='on';
        Fen.focus();
    }
    function siFF()
    {
        var tmp = document.getElementById('saisie');   // erreurs
        var tmp=Fen;                                   //    "
        var tmp=Champ;                                 //    "   ...
        // j'ai essayé pas mal d'autres choses, mais je ne trouve pas !
   
        alert(tmp.selectionEnd); // par exemple !
        //=======*************
    }
</script>

si vous savez ce serait sympa de me le dire.
il faut faire autrement ?
merci d'avance.

<hr />


Cordialement        Bul     [mon Site]     [M'écrire]



<hr />

26 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
5 avril 2007 à 13:20
j'ai oublié de préciser que le but du jeu
c'est de remplacer ces caractères sélectionnés par "autre chose".
avec IE on ferait : sel = Champ.selection.createRange();
                               sel.text="tout ce qu'on veut";      pour donner une idée.
<hr />


Cordialement        Bul     [mon Site]     [M'écrire]



<hr />
0
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
5 avril 2007 à 15:40
Code:


<hr />






function getFrameWindow(iframe) {
    return iframe.window?iframe.window:iframe.contentWindow;
}

function getFrameDocument(iframe) {
    return getFrameWindow(iframe).document;
}






<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
5 avril 2007 à 16:16
je suppose en liaison avec la source que tu as déposée...
<hr />


Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
5 avril 2007 à 16:54
mince, mes messages ont disparus ?

je remet alors !
en utilisant le script mis par FremyCompany ici : http://www.javascriptfr.com/codes/DOCUMENT-SELECTION-POUR-FF-FIREFOX_42090.aspx

<Script     Type="Text/JavaScript"
            Src="fremy.js"></Script>

 
 <script type="text/javascript">
    function init()
    {
         Fen=document.getElementById('saisie').contentWindow;
        Champ=document.getElementById('saisie').contentDocument;
        Champ.designMode='on';
        Fen.focus();
    }
function getFrameWindow(iframe)
{
    return iframe.window?iframe.window:iframe.contentWindow;
}
function getFrameDocument(iframe)
{
    return getFrameWindow(iframe).document;
}       
    function siFF()
    {
        var iframeWindow=getFrameWindow(document.getElementById('saisie'));
        var iframeSelection = iframeWindow.document.selection
        if (!iframeSelection)
        { iframeSelection=new SelectionObject(iframeWindow); }
        var iframeRange=iframeSelection.createRange();
        alert(iframeRange.text);        // affiche "undefined"


        alert(iframeRange.text);        // affiche "no selection"



        iframeRange.text="remplace";
    }
</script>




<hr />



Cordialement                Bul         [mon Site]         [M'écrire]



<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
5 avril 2007 à 17:10
B
ien le Bonjour The Bultez
Alors ce projet avance...

Faire tout simplement
var O_Edit = document.getElementById("saisie");
var szSelect = O_Edit.contentDocument.getSelection();

voir ce lien et les sous liens mais je penses que cela est déjà fait
;0)
0
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
5 avril 2007 à 17:26
Bon ben voici un exemple concret de mon code avec un iframe ;-)
<html>
    <head>
        <script src= "document.selection.js"></script>
        <script><!--
            var frame, frameWindow, frameDocument, frameSelection;
            function loadIframe() {
                if (getFrameDocument(document.getElementById("frame1"))) {
                    frame = document.getElementById("frame1");
                    frameWindow = getFrameWindow(frame);
                    frameDocument = frameWindow.document;
                    frameSelection = frameDocument.selection
                    if (!frameSelection) { frameSelection = new SelectionObject(frameWindow); }
                    frameDocument.designMode="on";
                } else {
                    setTimeout(loadIframe, 150);
                }
            }
           
            function getFrameWindow(iframe) {
                return iframe.window?iframe.window:iframe.contentWindow;
            }



            function getFrameDocument(iframe) {
                try { return getFrameWindow(iframe).document; } catch (ex) { return null; }
            }
           
            function replaceSelection() {
                var textRange = frameSelection.createRange();
                var el = document.getElementById("t_html");
                textRange.htmlText=el.value;
                el.value="";
            }
        --></script>
    </head>
   
       
        <form id ="replaceForm" action="javascript:replaceSelection()">
            <textarea id="t_html" name="t_html"></textarea>
           
        </form>
   
</html>



Pourquoi notre PC fait-il toujours ce qu'on lui demande ... et pas ce qu'on veut ???
0
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
5 avril 2007 à 17:36
Excuse moi, ce code n'était pas compatbile avec Internet Explorer (pour une raison un peu mistérieuse)

Je l'ai corrigé.

<html>
    <head>
        <script src= "document.selection.js"></script>
        <script><!--
            var frame, frameWindow, frameDocument;
            function loadIframe() {
                if (getFrameDocument(document.getElementById("frame1"))) {
                    frame = document.getElementById("frame1");
                    frameWindow = getFrameWindow(frame);
                    frameDocument = frameWindow.document;
                    frameDocument.designMode="on";
                } else {
                    setTimeout(loadIframe, 150);
                }
            }
           
            function getFrameWindow(iframe) {
                return iframe.window?iframe.window:iframe.contentWindow;
            }



            function getFrameDocument(iframe) {
                try { return getFrameWindow(iframe).document; } catch (ex) { return null; }
            }
           
            function replaceSelection() {
                var textRange = frameDocument.selection.createRange()
                if (!textRange) { textRange = new SelectionObject(frameWindow).createRange(); }
                var el = document.getElementById("t_html");
                textRange.text=el.value;
                el.value="";
            }
        --></script>
    </head>
   
       
        <form id ="replaceForm" action="javascript:replaceSelection()">
            <textarea id="t_html" name="t_html"></textarea>
           
        </form>
   
</html>
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
5 avril 2007 à 18:38
I'm very SORRY but
...


Faire tout simplement
var szSelect = O_Edit.contentWindow.getSelection();
//pour avoir accés aux propriétés





;0)
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 07:20
salut PetoleTeam,

        intéressant... mais  je ne suis pas doué !!!

 
 <script type="text/javascript">
    function init()
    {
      Fen=document.getElementById('saisie').contentWindow;
      Champ=document.getElementById('saisie').contentDocument;
      Champ.designMode='on';
      O_Edit = document.getElementById("saisie");
      Fen.focus();
    }
    function siFF()
    {
        var t1 = O_Edit.contentDocument.getSelection();   
        var t2 = O_Edit.contentWindow.getSelection();   
       
        alert(O_Edit.contentDocument.selectionStart);    //undefined
       
        alert(t1);                                       //affiche texte sélectionné
        t1="remplacer par n'importe quoi";               //ne remplace pas
        alert(t1.selectionStart);                        //undefined
       
        alert(t2);                                       //affiche le texte sélectionné
        t2="remplacer par n'importe quoi";               //ne remplace pas
        alert(t2.selectionStart);                        //undefined
    }
</script>

>>Alors ce projet avance...
    doucement... entre 25 autres choses.
    la conception est finie, avec IE je pourrais terminer,
       il faudrait que cette fonctionnalité marche avec FF ( et consors )
       pour que je finalise


si tu jettes un oeil pour me dire où me plante-je ?



le but du jeu c'est de remplacer ces caractères sélectionnés par "autre chose"
avec IE on ferait : sel = Champ.selection.createRange();
                               sel.text="tout ce qu'on veut";      pour donner une idée.





<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 07:30
à FremyCompany...

    avce ton dernier exemple, "tel quel"

    ça baigne avec IE
    avec FF :  

var textRange = frameDocument.selection.createRange()
                      FireBug me dit : selection : undefined, donc textRange aussi...


   
<hr />


Cordialement        Bul     [mon Site]     [M'écrire]



<hr />
0
Zobibol Messages postés 469 Date d'inscription mercredi 9 janvier 2002 Statut Membre Dernière intervention 20 février 2017 6
6 avril 2007 à 09:56
Bien le bonjour, alors un petit point de départ :
    function siFF()
    {
            var t2 = O_Edit.contentWindow.getSelection();  
            // récupère le point de départ
           var start = t2.anchorOffset;
           // récupère le nombre de caractère sélectionné
           var end  =  t2.focusOffset;
           // récupère le contenu
           var innerValue =O_Edit.contentDocument.body.textContent;
           // ajout de la balise entourante
           var newStr = innerValue.substr ( 0,start);
           //
           newStr+="<label style='background-color:blue; color:white'>"+t2+"</label>";
           // jusqu'à la fin
           newStr+= innerValue.substr ( end,innerValue.length);
           // et réaffecte le nouveau contenu
           O_Edit.contentDocument.body.innerHTML = newStr;
    }

Mais ce n'est qu'un point de départ car, il y a des soucis ( notament sur plusieur ligne.) après la question est de savoir par quoi remplacer, dans mon exemple, je m'appuis sur un label et ça fou la grouille parce que du coup la première sélection semble fonctionner mais après ça part un peu en live. surtout sur plusieur ligne  ( il ne prends pas en compte les saut de lignes ).

à creuser peu être ?

[o-_-o]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 10:23
salut zobibol,

>>à creuser peut être ?

    sûrement même !

    décalage probablement du au fait qu'on traite comme si c'était du
            "texte brut" et pas le html ( donc bonjour les balises déjà existantes... ) ?
    non ? ( ça marche la 1ère fois, plus après )



<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 10:32
mais si on applique ce que je proposais ailleurs

        1° mémoriser les caractères sélectionnés de l'Iframe
        2° remplacer cette sélection par "une suite de caractères qui n'existent pas" dans l'Iframe
        3° mémoriser l'Iframe modifié dans un textarea
        4° remplacer dans ce textarea "la suite de caractères qui n'existaient pas"
                par les balises + " les caractères sélectionnés du l'Iframe"
        5° mettre le textarea dans Iframe

ben... ça devrait le faire...
essais et je dis quoi.

<hr />


Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 10:34
mais si on applique ce que je proposais ailleurs

        1° mémoriser les caractères sélectionnés de l'Iframe
        2° remplacer cette sélection par "une suite de caractères qui n'existent pas" dans l'Iframe
        3° mémoriser l'Iframe modifié dans un textarea
        4° remplacer dans ce textarea "la suite de caractères qui n'existaient pas"
                par les balises + " les caractères sélectionnés du l'Iframe"
        5° mettre le textarea dans Iframe

ben... ça devrait le faire...
essais et je dis quoi.

<hr />


Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 10:43
après réflexion...
ça ne va pas coller car justement

var start = t2.anchorOffset;



    "ne tient pas compte des balises html" existantes.
mais dieu me tripote... on est est pas loin.


<hr />



Cordialement    Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 11:31
j'en suis donc là :

<html>
<head>
<script type="text/javascript">
    var ie,Fen,Champ,Txt,Sai;
    function init()
    {
        Sai=document.getElementById("saisie")
        Txt=document.getElementById("trv");        ie false;    /*@cc_on    ie true;    @*/   
        if ( ie )
                {
                    Fen=window.frames['saisie'];
                    Champ=Fen.document;
                }
        else    {
                    Fen=Sai.contentWindow;
                    Champ=Sai.contentDocument;
                }
        Champ.designMode='on';
        Fen.focus();
    }
   function trait()
   {
        var mem,sel;
        var tmp="peuprobable";
        while ( Champ.body.innerHTML.indexOf(tmp)>=0 )
        {
            tmp+=tmp;
        }
        if ( ie )
                {
                    sel = Champ.selection.createRange();
                    mem=sel.text;
                    sel.text=tmp;
                    Txt.value=Champ.body.innerHTML;
                }
        else    {
                    sel=Sai.contentWindow.getSelection();
                    var start = sel.anchorOffset;
                    var end  =  sel.focusOffset;   
                    mem=new String(sel);
   Txt.value= Champ.body.innerHTML.substr(0,start)+
              tmp+



             




Champ.body.innerHTML.substr(end,Champ.body.innerHTML.length);
   // ça ne fonctionne donc que s'il n'y a aucune balise !!!!
                }
        Txt.value=Txt.value.replace(tmp,"<label style='background-color:#FFCC99' onclick='alert("ok");'>"+mem+"</label>");
        setTimeout("Champ.body.innerHTML=Txt.value;",10);
        if (ie) sel.select();
        Fen.focus();
   }
   function bascule(btn)
   {
        Txt.value=Champ.body.innerHTML;
        if (btn.value=='mod')
                {   btn.value='lir';
                    Champ.designMode='off';
                }
        else    {
                    btn.value='mod';
                    Champ.designMode='on';
                }
        setTimeout('Champ.body.innerHTML=Txt.value;',10);
   }
</script>
</head>

<textarea   name="trv"
            id="trv"
            style="    width:98%;
                       height:40%;
                       border:0;
                       overflow:auto;
                       background-color:#DDFFFF"></textarea>

</html>







<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
0
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
6 avril 2007 à 14:38
Escuse moi mais chez moi mon exemple marche très bien...
Tu es sur que que tu as bien mis document.selection.js dans le même dossier ?
> Télécharge le ZIP de ma source pour en avoir le coeur net

Pourquoi notre PC fait-il toujours ce qu'on lui demande ... et pas ce qu'on veut ???
0
FREMYCOMPANY Messages postés 276 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 22 décembre 2008
6 avril 2007 à 14:53
En effet, il y avait une faute dans me ZIP, sorry...
J'avais corrigé chez moi et j'avais pas uploadé et quand j'ai posté ici, j'ai pas pris la version de mon disque dur mais celle du ZIP (confus)

Maintenant c'est corrigé (voir INDEX.HTML)

Pourquoi notre PC fait-il toujours ce qu'on lui demande ... et pas ce qu'on veut ???
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 15:01
à FremyCompany... euh oui.... je n'avais pas vu le zip,nouveau ?
mais j'ai téléchargé : pareil



<hr />



Cordialement    Bul     [mon Site]     [M'écrire]



<hr />
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
6 avril 2007 à 15:10
croisement de nos 2 derniers messages
j'ai retéléchargé, et c'est moi qui suis tout confusionné : pareil.
<hr />


Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
0
Rejoignez-nous