Forums : Extensions

Aller à la discussion :  Plus récente Plus ancienne

# Récupérer et envoyer le code source d'une sélection

Envoyé par : fice

Date : 17/01/2007 10:58

Bonjour à tous

je débute complètement en xul et je cherche à créer ma première extension pour FF, d'un fonctionnement similaire à clipmarks mais en privé.

Exemple, sur une page je sélectionne un texte avec des images, clic droit, "envoyer vers mon serveur" (c'est l'extension), et ça envoie la sélection vers une page php sur mon site. Une sorte de bloc note automatique. (ça c'est pour l'extension, la page php qui réceptionne et donne la possibilité de classer les données je saurais faire sans trop de problèmes)

J'ai fais apparaitre mon extension dans le menu contextuel, ce qui active un JS, jusqu'à là tout va bien. Maintenant je voudrais copier la sélection mais en incluant le node parent, comme le fait "code source de la sélection", de façon a garder un minimum de formatage. Les images, si il n'est pas possible de les copier, seraient transformées en liens que le script php se chargera de récupérer.

Et donc je ne sais pas comment récupérer le code source de ma sélection et j'aurais besoin de conseils/liens vers des pistes.

Merci d'avance

# Re: Récupérer et envoyer le code source d'une sélection

Envoyé par : David

Date : 17/01/2007 12:10

Bonjour fice,

Firefox utilise l'élément <browser/> (ou <tabbrowser/> mais c'est équivalent) . Cet élément contient la propriété contentWindow qui est en fait une interface nsIDOMWindow et lui même à une méthode getSelection() qui renvoie une interface de type nsISelection je pense que les propriétés anchorNode, anchorOffset et la méthode toString() sont ce que tu recherches, si ce n'est pas assez regarde aussi du coté de getRangeAt() et de son interface nsIDOMRange c'est encore plus complet.

Ce que je t'ai suggéré de permettra de récupérer facilement la version texte de la sélection et les noeuds DOM qui vont avec. Pour les images je pense que le plus simple c'est de passer les URL (facile à retrouvées grâce au DOM) des sources des images à ton script PHP qui lui les téléchargeras. Sinon, je suis sûr qu'avec l'interface nsIFileInputStream on doit pouvoir récupérer l'image, la transformée en base64 avec nsIBinaryInputStream et la fonction JS encodeURIComponent() et passer le tout à PHP qui n'as plus qu'a decoder la chaîne de base64 vers du binaire. Mais ça c'est un truc que j'ai jamais tenté.

David.

# Re: Récupérer et envoyer le code source d'une sélection

Envoyé par : fice

Date : 01/02/2007 17:27

Bonjour,

merci pour ta réponse super précise :) J'ai exploré un peu tout ça, j'en suis venu à un début de solution qui passe par les DOM. Mais j'ai un souci. Fonctionnement: on sélectionne un texte dans la page, on clique sur un button qui déclenche la fonction ci dessous:

function getSel(){
// pour afficher des résultats
resultat = document.getElementById("result");

// on récupère la sélection
selObj = window.getSelection();

// on récupère le node de la sélection
var node = selObj.anchorNode;

// on étend la selection au node parent
selObj.selectAllChildren(node.parentNode);
var range = selObj.getRangeAt(0);

// on enregistre la sélection HTML dans un documentFragment
documentFragment = range.cloneContents();

// insère le code dans un élement
resultat.appendChild(documentFragment);

// on passe resultat.innerHTML en arguments de la nouvelle fenêtre
param = '?p='+escape(resultat.innerHTML)+'&purl='+escape(location.href)+'&ptitle='+escape(document.title);

// l'url de la page de destination
URL='getSelection.php'+param;
window.open(URL,'selection','width=500,height=400,resizable=yes');
}

Tout marche bien, c'est formidable, je récupère aussi bien le texte que la mise en page html (balises images comprises) mais le seul problème c'est que je passe par innerHTML pour transformer mon documentFragment en code lisible (et transférable vers une page).

Je cherche une fonction DOM qui permettrait de transformer un documentFragment en string, des idées ?

Merci :)

# Re: Récupérer et envoyer le code source d'une sélection

Envoyé par : laurentj

Date : 02/02/2007 10:52

on passe resultat.innerHTML en arguments de la nouvelle fenêtre

beurk, c'est vraiment horrible ça ! et surtout, avec une selection trop grande, ça risque de ne pas fonctionner. Utilise plutôt la methode POST, et passe par xmlhttprequest (voir exemples dans le wiki).

En plus ta méthode, ça t'oblige à afficher la page php, alors qu'avec xmlhttprequest, on peut rester sur la page courante.

# Re: Récupérer et envoyer le code source d'une sélection

Envoyé par : thefab

Date : 02/02/2007 14:46

Je cherche une fonction DOM qui permettrait de transformer un documentFragment en string, des idées ?

XMLSerializer sert à convertir des sous-arborescence DOM ou des documents DOM en texte.

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.