Envoyé par : Drazic
Date : 23/03/2006 11:30
Bonjour à tous,
Dans mon extension, lorsque l'utilisateur sélectionne du texte et qu'il effectue un clique-droit sur la sélection, une option supplémentaire s'ajoute au menu contextuel : "Copier le code HTML".
J'arrive sans problèmes à récupérer du texte grâce à la ligne de commande
var tempo=gContextMenu.searchSelected();
Le problème, c'est que je n'arrive pas à récupérer du code HTML, juste du texte simple !
Est-ce possible de récupérer le code HTML ? Si oui, comment ?
Merci d'avance ! Drazic
Envoyé par : Drazic
Date : 27/03/2006 10:44
Petit up du topic, je suis vraiment bloqué... :S
Envoyé par : Zéf
Date : 27/03/2006 23:19
Salut,
Je ne connais pas gContextMenu, mais en cherchant un peu, il semble avoir assez peu d'API (on peut savoir si c un lien, un image ou rien de spécial qui est pointé).
Pourquoi ne pas utiliser autre chose ?
J'ai jeté un oeil au source de WebDeveloper une extension bien complète qui m'a permis de découvrir pas mal de chose ... dont ça :
function getSelection() { var currentDocument = getBrowser().contentDocument; var currentWindow = getBrowser().contentWindow; var selection = currentWindow.getSelection(); selection.selectAllChildren(currentDocument.documentElement); return currentWindow.getSelection(); }
Voila, si ce n'est pas exactement cela que tu cherches, ça doit au moins être dans ce style là :)
Bon courage,
Z.
P.S. N'oublie surtout pas le XPCNativeWrapper ! (cf le tuto général dans la base de données de ce site)
Envoyé par : Drazic
Date : 28/04/2006 18:14
Salut,
Merci pour ta réponse et désolé pour la mienne qui est si tardive ;) J'ai étudié le bout de code que tu m'as passé, et au final j'ai toujours le même problème, je ne récupère que du texte...
Par exemple, si l'utilisateur sélectionne du texte, qui est en italique, ensuite il y à un lien, dont le code serait :
<i>Bonjour, allez sur <a href="www.google.fr">Google</a> pour faire une recherche.</i>
J'obtiens :
Bonjour, allez sur Google pour faire une recherche.
Envoyé par : thefab
Date : 29/04/2006 02:03
Hello,
A mon avis le getSelection() doit être une bonne piste mais le problème (je pense) c'est que tu essayes avec toString() et que cette méthode te retourne une version texte de l'objet.
Essaye de tester avec typeof(valeur-de-retour) pour voir si il s'agit vraiment d'un string ou d'un objet... si il s'agit d'un objet c'est surement un sous-document HTML (fragment mais je suis pas sur) qui contient tout le code HTML et que tu peux manipuler avec DOM.
Fabrice
Envoyé par : Drazic
Date : 02/05/2006 11:26
Salut,
En utilisant
var currentWindow = getBrowser().contentWindow; var selection = currentWindow.getSelection();
ou
var winWrapper = new XPCNativeWrapper(getBrowser().contentWindow, 'document', 'getSelection()');
J'obtiens un objet lorsque je teste avec typeof. Le problème c'est que lorsque je fais
for (var test in selection) dump(test+'\n');
Je n'obtiens que isCollapsed comme possibilité. Ou si je fais la même chose avec ma variable winWrapper, ca me fait carrément une erreur !
Je me demande si c'est vraiment possible...
Envoyé par : laurentj
Date : 02/05/2006 11:42
bon, les gens, faudrait peut être apprendre à chercher un peu vous ne trouvez pas ? (désolé, mais être débutant n'est pas une excuse)
Régle numero 1 : chercher sur xulplanet.com
Donc, sur xulplanet, pour une recherche sur getSelection, on trouve notament une méthode getSelection() sur un objet nsIDOMNSHTMLDocument, et on trouve un getSelection() sur un objet nsIDOMWindow.
Que lis-t-on ? que le premier renvoi une chaîne, et le deuxième un objet nsISelection. Or précisement, contentDocument implemente précisement nsIDOMNSHTMLDocument, et contentWindow l'interface nsIDOMWindow. (pour le savoir, un peu de logique, de bon sens et 2-3 tests suffisent hein, pas besoin d'avoir fait 3 ans d'études sur Gecko, et au pire, dans les résultats de recherche, il y a comme par hasard, l'objet HTMLDocument et Window..).
La chaine ne suffit pas (car contient le texte), donc il faut travailler sur contentWindow et non contentDocument. Donc on recupère un objet nsISelection.
Aller, un peu de courage ! On apprend à cliquer, puis on clique sur nsISelection. Et.. Oh ! Miracle ! On a toute l'api pour récupérer les range et les noeuds DOM sélectionnés ! Incredible...
Envoyé par : thefab
Date : 02/05/2006 12:57
Pour Laurent,
bon, les gens, faudrait peut être apprendre à chercher un peu...
Quoi les... ma piste du getSelection() qui retourne une version texte était pas loin...
C'est quand même pas à ceux qui donne une piste de faire les tests pour celui qui pose la question ! Hein, non, mais, et ho...
Fabrice
Envoyé par : laurentj
Date : 02/05/2006 13:10
j'ai dis "les", pour généraliser. Je trouve qu'il y a de plus en plus de questions qui n'ont pas lieu d'être sur ce forum, dont leur auteur pourrait trouver la réponse en 30 secondes avec un peu de courage en allant dans la référence sur xulplanet.com, plutôt que d'attendre 3 jours qu'on veuille bien leur répondre.
Désolé pour ce coup de gueule.
Envoyé par : Drazic
Date : 02/05/2006 17:29
Hum... Merci pour ta piste.
Cependant, traîtes-moi d'incompétent ou de ce que tu veux, j'ai passé des heures à chercher (aussi bien sur xulplanet que sur xulfr ou en effectuant diverses recherches sur google). Je suis sur ce problème depuis un bout de temps et je ne compte pas que sur ce forum.
Crois-moi ou pas, ce n'était pas de la mauvaise volonté !
Envoyé par : Drazic
Date : 03/05/2006 15:24
J'ai enfin réussi ! Merci à tous ceux qui m'ont aidés, malgré le coup de gueule :p
Voilà mon code pour ceux qui seraient intéressés ! Je ne pense pas que ça soit ce qu'il y a de plus propre (notamment avec la création d'attributs comme points de repères), mais ça fonctionne !
var txtTmp; var selection = getBrowser().contentWindow.getSelection(); var startRange = selection.getRangeAt(0).startContainer; var startFind; var ahref=''; if (!(startFind = startRange.data)) startFind=startRange.innerHTML; if (startRange.parentNode.nodeName=='A') { ahref='<a href="'+startRange.parentNode.getAttribute('href')+'">'; } var endRange = selection.getRangeAt(0).endContainer; var endFind; if (!(endFind = endRange.data)) endFind=endRange.innerHTML; if (startFind!=endFind) { startRange = startRange.parentNode; endRange = endRange.parentNode; do{ startRange.setAttribute('noxblog','startrange'); startRange = startRange.parentNode; } while (startRange.nodeName!='HTML'); do{ endRange = endRange.parentNode; } while (endRange.getAttribute('noxblog')!='startrange'); var pos = endRange.innerHTML.indexOf(startFind); txtTmp = endRange.innerHTML.substr(pos,endRange.innerHTML.length); pos = txtTmp.indexOf(endFind); txtTmp = txtTmp.substr(0,pos+endFind.length); if (ahref!='') txtTmp=ahref+txtTmp; } else txtTmp = startFind;
Envoyé par : scarabee
Date : 08/06/2006 00:47
Bonjour
J'ai lu avec attention vos messages. Je cherche à réaliser une commande qui me permettrait de récupérer le code HTML d'un élément sélectionné dans une iframe nommée 'editeur'(pour un éditeur WYSIWYG).
Sous IE pas de souci. Voici mon code : " mydoc = window.frames'editeur'.document.selection.createRange(); codehtml = mydoc.htmlText; "
Mais cela ne marche bien sûr pas sous Firefox ...
Pour l'instant j'en suis à ne récupérer que le texte brut : " mydoc = document.getElementById('editeur'); textsanshtml = mydoc.contentWindow.getSelection().getRangeAt(0).toString(); "
Je ne sais vraiment pas comment faire pour afficher la source HTML de la sélection.
J'ai été sur http://www.xulplanet.com/references/xpcomref/ifaces/nsIDOMRange.html mais je n'ai pas trouvé d'éléments qui me permettaient d'afficher cette source.
Pourriez-vous m'aider ? Please ...
Guilhem
Envoyé par : Christophe Charron
Date : 08/06/2006 08:32
Bonjour, s'inspirer du code de xul notepad de george Nava ? http://www.georgenava.com/xul/notepad/notepad.php
Envoyé par : scarabee
Date : 08/06/2006 11:18
J'ai regardé un peu. En fait le javascript est à l'adresse : http://www.georgenava.com/xul/notepad/notepad.js
Il a dû mal configurer son serveur car on télécharge au lieu de lire... Mais je n'ai rien trouvé dedans de neuf.
Sinon j'ai une solution mais c'est pas la joie : c'est d'insérer des balises dans le code html au début et à la fin de la sélection avec la méthode de mon choix et de retraiter ensuite le code pour extraire les éléments qui sont inclus entre les balises. Il faut bien entendu utiliser des balises qui ne sont pas présentes dans le document.
Mais ça fait un peu bidouille.
En tout cas merci d'une réonse aussi rapide. Si vous avez des idées, n'hésitez pas.
Merci
Envoyé par : Nouacha
Date : 07/08/2006 19:10
Voici comment récupérer le code HTML d'une sélection (faite dans le cadre par exemple d'un éditeur wysiwyg) :
ewin = document.getElementById('editeur').contentWindow; selectext = ewin.getSelection(); if (selectext.rangeCount > 0) { range = selectext.getRangeAt(0); var clonedSelection = range.cloneContents(); var div = document.createElement('div'); div.appendChild(clonedSelection); htmltext = div.innerHTML; } else { htmltext = ''; }
Je pars du principe que l'élément a pour ID "editeur"
Le script retourne la variable htmltext qui contient le code html.
J'ai pas fait de return htmltext
car dans mon cas, c'est intégré dans une fonction plus longue
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.