Redonner le focus à une Iframe

Signaler
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
-
    Saluté tout le monde ! vous avez la forme ? héhé ... nan c'est pas parce qu'on demande de l'aide qu'il ne faut pas s'enquerir de la forme de ses "helpeurs" potentiels ...
bon vala ... je vous explique c'est pas très complexe (quoique).
J'utilise le framework prototype et un editeur wisiwig "spaw editor" (très joli d'ailleurs je vous le conseille) ...
mon idée est de sauvegarder à intervale régulier le contenu tappé dans l'editeur...
pour ça je suis obligé de récupérer le contenu d'une textarea... donc jusque là ça va j'ai réussi à me démerder...
sauf que les éditeurs wisiwig utilisent une Iframe pour le mode "mise en page" et quand je récupère le contenu de la textarea (en fait le code html de ce qui est dans la fameuse Iframe) eh bien mon iframe perds le focus ...
donc si je ne regarde pas et que je continue à écrire eh bien vu que j'ai perdu le focus j'ecris dans le vide ...
l'idée est donc de trouver le moyen de redonner le focus à mon Iframe et de positionner le curseur à la fin (ou mieux là ou j'en étais avant la sauvegarde automatique) ...
sauf qu'une Iframe n'est pas une textArea et que je ne sais pas comment elle est considérée comme telle en mode edition :(
bref neeeed help !
merci par avance à vous
@++

6 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
Bonjour,
    le problème n'est pas de rendre le focus
         ??.focus(); ( avec ?? différent ie et autres navigateurs ) fonctionne très bien,
         mais de repositionner le curseur là où il était.
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    ouaip ... je pense que c'est plus complexe que ça ...
en fouillant le code de l'aditeurs j'ai trouvé cette fonction

// focus
SpawEditor.prototype.focus = function()
{
  var obj = (this.isInDesignMode())?this.getPageIframe(this.getActivePage().name):this.getPageInput(this.getActivePage().name);
  if (obj.contentWindow) // gecko
    obj.contentWindow.focus();
  else
    obj.focus();
}

mais je ne sais pas comment l'utiliser depuis "l'extérieur" ....

dans leur code j'ai des trucs du genre
  //editor.getPageIframe(editor.active_page.name).focus();

mais moi je ne connais même pas le nom de mon objet créé puisque tout est instancié depuis une class php ....
disons que c'est pas trop prévu pour bidouiller direct en JS au départ ... mais là  il me manque plus que ça pour avoir une appli nikel :(:(
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
>>je ne connais même pas le nom de mon objet créé puisque tout est instancié depuis une class php
    euh ? c'est pas parce que c'est créé en php qu'on ne connais pas le nom d'un objet !
>>

ouaip ... je pense que c'est plus complexe que ça ...
    pour rendre le focus ? non, non , c'est assez simple,
             sauf différence IE / FF, comme souvent !  
    si pour l'iframe     id name "Saisie"

    switch (navigator.appName)   
    {    //         ===============================
        case     "Microsoft Internet Explorer":
        //         ===============================
            Fen=window.frames['Saisie'];
            Champ=Fen.document;
            break;
        //               =========
        default:    //     sinon
        //               =========
            Champ=document.getElementById('Saisie').contentDocument;
            Fen=document.getElementById('Saisie').contentWindow;
            break;   
    }
    Fen.focus();

    mais encore une fois... faut repositionner le curseur !

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    J'ai trouvé le moyen de récupérer le code que je veux sans perdre le focus ...
le pb est que sous firefox ça me renvoie le curseur au début du texte ... au lieu de le laisser à sa position actuelle :(
sous IE ça marche...
j'ai trouvé des fonctions pour positionner le curseur mais apparament ça ne marche pas :(

function Cursor_SetPos( where_, pos_){
    //-- Recup l'Objet
    var Obj = document.getElementById( where_);
    if( Obj){
        Obj.focus();
        if( typeof Obj.selectionStart != "undefined"){
            Obj.setSelectionRange( pos_, pos_);
        }
        else{ // IE and consort
            var Chaine = Obj.createTextRange();
            Chaine.moveStart('character', pos_);
            //-- Deplace le curseur
            Chaine.collapse();
            Chaine.select();
        }
        //-- Retour valeur Reelle placee
        return( Cursor_GetPos( where_, pos_));
    }
}

sur la base de ce que m'as donné comme code

 Cursor_SetPos(Fen, '50');

Je sais pas si c'est un bug lié à FF ou à spaw mais je commence à perdre espoir ...
J'ai posé des question sur leur forum mais sans réponses ... p'tet que mon anglais est trop mauvais ... lol
++ et merciiii !!!!
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    j'ai testé le setSelectionRange mais apparament ça ne marche pas sur une iframe non ?
ça ne marche que sur des objets de type champ de texte ou textarea ?
Messages postés
329
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
29 mars 2015
3
    yebah ... Je suis toujours dans la mouise avec ce pb... personne n'a d'idée ?
un p'tit lien vers mon post sur leur forum officiel
http://forums.solmetra.com/viewtopic.php?t=8189