Extensión de Chrome: cómo capturar texto seleccionado y enviarlo a un servicio web

Para la extensión Google Chrome, necesito capturar el texto seleccionado en una página web y enviarlo a un servicio web. ¡Estoy atascado!

Primero probé un bookmarklet, pero Chrome en Mac parece tener algunos errores de bookmarklet, así que decidí escribir una extensión.

Yo uso este código en mi ext:

function getSelText(){
    var txt = 'nothing';
    if (window.getSelection){
        txt = "1" + window.getSelection();
    } else if (document.getSelection) {
        txt = "2" + document.getSelection();
    } else if (document.selection) {
        txt = "3" + document.selection.createRange().text;
    } else txt = "wtf";
    return txt;
}
var selection = getSelText();
alert("selection = " + selection);

Cuando hago clic en el icono de mi extensión, obtengo un "1". Así que creo que el acto de seleccionar fuera de la ventana del navegador está causando que el texto ya no sea visto por el navegador como "seleccionado".

Solo una teoría ...

pensamientos?