2009-10-15 7 views
1

J'ai la recherche d'essayer toujours de comprendre pourquoi IE ne sauvera pas la position actuelle du curseur, puis le recharger. Pour être descriptif de la situation, cela fonctionne comme ceci:Tinymce IE6 + Comment puis-je obtenir une plage de travail?

Le client veut Tinymce personnalisé construit avec un chargeur d'image ajax qui est simpliste dans la nature que tout «idiot» peut télécharger et définir certains paramètres à une image dans l'éditeur de texte et rends-le joli. Nous avons beaucoup de clients qui aiment simplement coller du mot et fckeditor ne le coupait plus. En tout cas l'ajax/l'uploader tout cela fonctionne parfaitement. Le problème devient lors de la saisie de l'image dans l'éditeur. FF/Opera/Crome etc, fonctionnent parfaitement, mais IE a bien sûr le problème.

Voici ce dont j'ai besoin de répondre, le Tinymce perd son focus car une boîte de dialogue jQuery apparaît pour le téléchargement (cette fonctionnalité ne peut pas être développée en plugin, ils veulent des outils externes, donc pas de classes/fonctions donc je ne peux pas simplement appeler tinyMCEPopup.restore()) J'ai besoin de sauvegarder la position du curseur/la sélection de l'image et de la mémoriser/passer à travers certaines fonctions et en la plaçant restaurer la sélection.

J'ai essayé de le faire des centaines de façons et que l'on a travaillé comme obtenir la longueur de la sélection correcte mais le curseur est pos 0. Cela a fonctionné lors de la création d'un objet de gamme dans IE

if(document.selection) { 
b = document.getElementById('txtarea'); 
range = b.createTextRange(); 
//the rest of the jaz 
} 

I Beaucoup de sources m'ont dit que l'obtenir à partir du DOM ne fonctionnera pas car Tinymce est construit à l'intérieur d'un iframe, mais createRange() ne stocke pas non plus actuellement. Si quelqu'un sait ou a trouvé un travail pour cela, j'apprécierais grandement, j'ai creusé mon cerveau pendant 16 heures de temps de développement en essayant de résoudre ce problème avec aucune solution utilisable. using tinyMCE.activeEditor.selection.getBookmark() n'a pas non plus de dés. Je suis moyenne sur Javascript, je connais mon chemin, mais ce n'est pas forcément mon point fort, PHP/backend/le développement logiciel est. Donc, il se peut que je sois stupide quand il y a une solution simple.

Merci pour votre temps.

+0

Quand appellent tinyMCE.activeEditor.selection.getBookmark() vous? Je pense que c'est peut-être ce dont vous avez besoin, vous pourriez juste l'appeler au mauvais moment. –

+0

J'appelle à l'intérieur de la configuration: fonction (ed) {l'intérieur d'un ed.onClick.add (function (ed) {qui détecte si le nœud est un img sous le nom de nœud enregistre ensuite hors du signet, avant de dialogue jQuery est même appelé, donc il est mise au point. – Dreamcube

Répondre

3

Je pense toujours TinyMCE fera pour vous, mais je ne suis pas un expert en la matière et n'ont pas eu le temps de jouer avec elle en ce moment (peut-être plus tard). Je connais les sélections et les gammes, donc vous pourrez peut-être adapter les fonctions ci-dessous pour votre usage. Vous aurez besoin de passer dans l'objet window pour l'éditeur iframe dans les deux fonctions:

function saveSelection(win) { 
    var doc = win.document; 
    var sel = win.getSelection ? win.getSelection() : doc.selection; 
    var range; 

    if (sel) { 
     if (sel.createRange) { 
     range = sel.createRange(); 
     } else if (sel.getRangeAt) { 
     range = sel.getRangeAt(0); 
     } else if (sel.anchorNode && sel.focusNode && doc.createRange) { 
     // Older WebKit browsers 
     range = doc.createRange(); 
     range.setStart(sel.anchorNode, sel.anchorOffset); 
     range.setEnd(sel.focusNode, sel.focusOffset); 

     // Handle the case when the selection was selected backwards (from the end to the start in the 
     // document) 
     if (range.collapsed !== sel.isCollapsed) { 
     range.setStart(sel.focusNode, sel.focusOffset); 
     range.setEnd(sel.anchorNode, sel.anchorOffset); 
     } 
     } 
    } 
    return range; 
    } 

    function restoreSelection(win, range) { 
    var doc = win.document; 
    var sel = win.getSelection ? win.getSelection() : doc.selection; 

    if (sel && range) { 
     if (range.select) { 
     range.select(); 
     } else if (sel.removeAllRanges && sel.addRange) { 
     sel.removeAllRanges(); 
     sel.addRange(range); 
     } 
    } 
    } 
+0

Merci beaucoup, a parfaitement fonctionné! qui efface un casse-tête, merci encore beaucoup apprécié. – Dreamcube

+0

Oh-mon-fg! merci beaucoup pour ce détachement, j'ai passé les 6 dernières heures essayer toutes sortes de vaudou pour faire mon dialogue jquery envoyer une image à la wordpress edior dans la bonne position. tout a fonctionné en chrome et FF, mais IE a refusé de placer le contenu inséré à la position du caret. grâce @Dreamcube pour poser la question avec suffisamment de phrases reconnaissables pour qu'il soit pris sur une recherche google Tim Down - Je Doff ma casquette à toi bon monsieur – CommentLuv

+0

@CommentLuv: Heureux d'aider :) –

Questions connexes