Javascript 如何通过Firefox扩展操作选定的文本

Javascript 如何通过Firefox扩展操作选定的文本,javascript,firefox,google-chrome,Javascript,Firefox,Google Chrome,我正在开发一个Firefox扩展,它将处理突出显示的文本 在独立页面上,我可以通过以下方式获取所选文本: selectedText = document.selection?document.selection.createRange().text; 然后,我将在所讨论的文本区域上使用字符串操作来操作所选文本。不幸的是,对于插件来说这是不可能的,因为我不知道用户选择的文本在哪里 是否有方法获取选定文本的元素名称,或在不使用元素名称的情况下更改选定文本?您需要从用户选择中获取范围对象: var

我正在开发一个Firefox扩展,它将处理突出显示的文本

在独立页面上,我可以通过以下方式获取所选文本:

selectedText = document.selection?document.selection.createRange().text;
然后,我将在所讨论的文本区域上使用字符串操作来操作所选文本。不幸的是,对于插件来说这是不可能的,因为我不知道用户选择的文本在哪里


是否有方法获取选定文本的元素名称,或在不使用元素名称的情况下更改选定文本?

您需要从用户选择中获取范围对象:

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

var rangeObject = getRangeObject(userSelection);

范围对象具有开始和结束容器节点等


更多信息可以在Quirksmode和w3.org上找到

感谢您提供的信息。我尝试将这些函数放入overlay.js中,但在安装插件后无法提醒()任何突出显示的文本。我在这方面有点新手,但是否有可能将Safari和Opera代码放入Firefox扩展中是个问题?为了用一种愚蠢的简单方式证明自己,在Firefox中打开一些随机网页,选择页面上的一些文本,聚焦地址栏,粘贴“javascript:void(alert(content.getSelection())”(不带引号),然后按Enter键。
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;
    }
}

...
selectedText = content.getSelection().toString();