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

How do you manipulate selected text via a Firefox extension

提问人:Mark Wilbur 提问时间:2/6/2009 最后编辑:Mark Wilbur 更新时间:5/2/2016 访问量:3191

问:

我正在开发一个可以处理突出显示文本的 Firefox 扩展程序。

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

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

然后,我会在有问题的文本区域上使用字符串操作来操作选定的文本。不幸的是,这对于插件来说是不可能的,因为我不知道用户选择的文本在哪里。

有没有办法获取选择文本的元素的名称或在没有元素名称的情况下更改所选文本?

JavaScript 火狐 谷歌浏览器

评论


答:

0赞 Scott Evernden 2/6/2009 #1

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

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;
    }
}

...

Range 对象具有开始和结束容器节点等。

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

评论

0赞 Mark Wilbur 2/6/2009
谢谢你的信息。我尝试将这些函数放入我的覆盖 .js 中,但在安装插件后无法发出任何突出显示的文本。我在这里有点新手,但是将 Safari 和 Opera 代码放入 Firefox 扩展中是否有可能是问题所在?
4赞 altblue 3/22/2009 #2
selectedText = content.getSelection().toString();

评论

1赞 altblue 3/22/2009
为了以一种愚蠢的简单方式证明自己,在Firefox中打开一些随机的网页,选择该页面上的一些文本,聚焦地址栏,粘贴“javascript:void(alert(content.getSelection()))”(不带引号),然后按Enter键。