Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 juil. 2007 à 13:35
Voilà, je reposte mon problème. Je suis en train de faire un fonctionnalité permettant à l'utilisateur de rechercher et de remplacer un texte présent dans la fenêtre principale par le biais d'une popup. Le problème est que, lorsque je rentre une valeur, il ne trouve pas le texte.
J'ai essayé de remplacer la ligne :
var txt = window.document.body.createTextRange();
par :
var txt = window.opener.document.body.createTextRange();
Mais ça me génère une erreur dans ma alert box du type [object].
Si quelqu'un à une idée de ce qui ne va pas dans mon code.
Merci.
Voici ma fonction :
function finder (xkey) {
var params = 0;
if ( document.frm.str1.value.length == 0 ) return;
var elm = document.frm.str1.value;
var rpl = document.frm.str2.value;
var txt = window.document.body.createTextRange();
if ( document.frm.match1.checked ) params += document.frm.match1.value*1;
if ( document.frm.match2.checked ) params += document.frm.match2.value*1;
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 juil. 2007 à 14:18
Salut,
J'ai testé la ligne que tu m'as mis :
var txt = window.opener.document.selection.createRange().text;
ça ne marche pas. Ca me génère une erreur :
Cet objet ne gère pas cette propriété ou cette méthode.
J'ai également essayé de mettre :
var txt = window.opener.document.body.createTextRange(); et j'ai comme erreur :
Impossible d'effectuer cette opération à cause de l'erreur suivante 800a025e.
window.opener ça me semblait logique mais bon ça ne marche pas. Du coups, je suis un peu perdu.
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 juil. 2007 à 15:29
Oui la méthode alert m'affiche bien le texte sélectionné. Je pense que l'erreur doit se situer dans la boucle :
i = 0;
while ( txt.findText(elm, 1000000, params) && i++ < 20000 ) {
txt.select ();
txt.pasteHTML (rpl);
txt.collapse(false);
}
Je sais pas si c'est compatible avec la ligne :
var txt = window.opener.document.selection.createRange().text;
Parce ce que au départ, j'étais parti sur
var txt = window.document.body.createTextRange();
pour ne pas que l'utilisateur ait à sélectionner un texte dans la fenêtre. Mais bon, là je suis un peu perdu parce que si j'execute uniquement ma fenêtre de Rechercher/Remplacer, il me trouve bien les mots recherchés et il les remplace (en mettant : var txt = window.document.body.createTextRange();) dans la même fenêtre. Mais dès que je veux passer par 2 fenêtres ça foire.
Est qu'il y a une methode particulière à utiliser avec txt.select() en passant avec le window.opener.document.selection.createRange().text; ?
cs_bultez
Messages postés13616Date d'inscriptionjeudi 13 février 2003StatutMembreDernière intervention15 octobre 201330 3 juil. 2007 à 15:44
>> Est qu'il y a une methode particulière à utiliser avec txt.select()
à priori, je ne pense pas... mais ? jamais utilisé et pas de "sources
proches" pour faire un test vite fait...
reste à faire du pas à pas, avec le debogger... pour voir ce qui se passe ?
<hr />
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 3 juil. 2007 à 16:23
Ok merci pour ton aide. Là je suis en train de regarder du côté des showModelessDialog :
showModelessDialog("search.htm",window,"status:false;dialogWidth:470px;dialogHeight:400px");
où je déclare dans ma page search.html une variable sData = dialogArguments;
et : var txt = sData.document.createTextRange();
Mais ça coinçe aussi en passant par cette méthode.
Jarod1980
Messages postés273Date d'inscriptionsamedi 5 juillet 2003StatutMembreDernière intervention31 mars 20152 4 juil. 2007 à 16:29
C'est clair, c'est toujours nickel quand ça marche . J'ai essayé de faire plusieurs tests pour comprendre ce qui foiré et je suis pas arrivé à trouver, pourtant tout les raisonnements me semblaient tous logiques. Au cas où, je poste ma solution sur ce post, ça pourra peut être aidé quelqu"un.
Voici le code dans la boite de dialogue rechercher:
Dans la fenêtre principale, j'appel ma fenêtre Rechercher de la façon suivante :
showModelessDialog('Find.htm', window,'dialogWidth:385px; dialogHeight:165px; scroll:no; status:no; help:no;');
Le script dans ma popup Rechercher :
var rng = dialogArguments.document.body.createTextRange();
function window.onunload() {
dialogArguments.dWin=null;
}
function searchtype(){
var retval = 0;
var matchcase = 0;
var matchword = 0;
if (document.all.blnMatchCase.checked) matchcase = 4;
if (document.all.blnMatchWord.checked) matchword = 2;
retval = matchcase + matchword;
return(retval);
}
function findtext(){
if (document.all.strSearch.value.length < 1) {
alert("entrer un texte.");
}
else {
var searchval = document.all.strSearch.value;
rng.collapse(false);
if (rng.findText(searchval, 1000000000, searchtype())) {
rng.select();
}
else {
var startfromtop = confirm("Aucun mot trouvé.\nVoulez vous recommencer du haut?");
if (startfromtop) {
rng.expand("textedit");
rng.collapse();
rng.select();
findtext(); }}}}