2009-02-06 4 views
5

Ich arbeite an einer Firefox-Erweiterung, die markierten Text manipulieren wird.Wie manipulierst du ausgewählten Text über eine Firefox-Erweiterung

Auf einer Stand-alone-Seite, kann ich den ausgewählten Text mit bekommen:

selectedText = document.selection?document.selection.createRange().text; 

Dann würde ich den ausgewählten Text mit String-Operationen auf dem Textfeld in Frage manipulieren. Leider ist das für ein Plugin nicht möglich, da ich nicht weiß, wo der ausgewählte Text des Benutzers ist.

Gibt es eine Möglichkeit, den Namen des Elements, in dem Text ausgewählt ist, zu erhalten oder markierten Text ohne den Namen des Elements zu ändern?

Antwort

4
selectedText = content.getSelection().toString(); 
+2

Hm, ich lese "Ich arbeite an einer Firefox-Erweiterung ..." – altblue

+1

und um sich doof-einfach zu beweisen, öffnen Sie eine beliebige Webseite in Firefox, wählen Sie einen Text auf dieser Seite, Fokus-Adressleiste, einfügen "javascript: void (alert (content.getSelection()))" (ohne Anführungszeichen) und drücken Sie die Eingabetaste. – altblue

0

müssen Sie den Bereich Objekt von Ihrer Benutzerauswahl erhalten:

var userSelection; 
if (window.getSelection) 
    userSelection = window.getSelection(); 
else if (document.selection) // should come last; Opera! 
    userSelection = document.selection.createRange(); 

var rangeObject = getRangeObject(userSelection); 

...

function getRangeObject(selectionObject) { 
    if (selectionObject.getRangeAt) 
     return selectionObject.getRangeAt(0); 
    else { // Safari! 
     var range = document.createRange(); 
     range.setStart(selectionObject.anchorNode, selectionObject.anchorOffset); 
     range.setEnd(selectionObject.focusNode, selectionObject.focusOffset); 
     return range; 
    } 
} 

... 

Das Range-Objekt hat Start- und End-Container-Knoten, etc ..

Weitere Informationen finden Sie auf Quirksmode here und auf w3.org here

+0

Danke für die Info. Ich habe versucht, diese Funktionen in meine overlay.js zu setzen, konnte aber keinen markierten Text nach der Installation des Plugins alarmieren(). Ich bin ein wenig Anfänger hier, aber ist es möglich, dass die Eingabe von Safari und Opera-Code in eine Firefox-Erweiterung das Problem ist? –