【问题标题】:How do you manipulate selected text via a Firefox extension如何通过 Firefox 扩展操作选定的文本
【发布时间】:2009-02-06 06:46:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: javascript firefox google-chrome


    【解决方案1】:
    selectedText = content.getSelection().toString();
    

    【讨论】:

    • 为了以一种简单的方式证明自己,在 Firefox 中打开一些随机网页,选择该页面上的一些文本,聚焦地址栏,粘贴“javascript:void(alert(content.getSelection( )))"(不带引号),然后按 Enter。
    【解决方案2】:

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

    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 here 和 w3.org here

    【讨论】:

    • 感谢您的信息。我尝试将这些功能放入我的 overlay.js 中,但在安装插件后无法通过 alert() 删除任何突出显示的文本。我在这里有点新手,但是将 Safari 和 Opera 代码放入 Firefox 扩展是否有问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多