You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox扩展开发:getSelection().toString()无法获取选中文本

Firefox扩展无法获取页面选中文本问题解决

问题描述

开发基础Firefox扩展,功能为获取页面选中文本并拼接进URL后在新标签页打开,但无法成功获取选中文本(测试对象为普通页面文本,已知textarea/input存在Firefox相关bug,暂不涉及)。

原manifest.json代码:

{
  "manifest_version": 2,
  "name": "Send2search test",
  "version": "1.0",
  "permissions": ["menus"],
  "background": {
    "scripts": ["bg.js"]
  },
}

原bg.js代码:

browser.menus.create(
    {
      id: "gglSearch",
      title: "Search in new tab.",
      contexts: ["selection"],
    },
  );

browser.menus.onClicked.addListener(async function (info, tab) {
    var selectedTxt = window.getSelection().toString();
    if (info.menuItemId == "gglSearch") {
        var searchUrl = `https://www.google.com/search?q=${selectedTxt}`;
        let openNewTab = browser.tabs.create(
            {
                active: false,
                url: searchUrl,
                index: tab.index+1
            }
        );
    };
});

现象:每次打开空白Google搜索页,说明未获取到选中文本;尝试用content.getSelection().toString()替代后,新标签页无法打开。

问题原因

后台脚本(bg.js)运行在独立的后台页面环境中,window.getSelection()获取的是后台页面的选中内容(默认为空),而非当前用户操作的标签页中的选中文本。content.getSelection()的写法本身错误,后台脚本无法直接访问内容脚本的对象。

解决方案

  1. 利用menus.onClicked回调的info参数:该参数自带selectionText属性,直接存储了用户选中的文本内容。
  2. 添加必要权限:操作标签页需补充tabs权限到manifest.json中。
  3. URL编码处理:对选中文本进行URL编码,避免特殊字符导致URL无效。

修改后的代码

manifest.json

{
  "manifest_version": 2,
  "name": "Send2search test",
  "version": "1.0",
  "permissions": ["menus", "tabs"],
  "background": {
    "scripts": ["bg.js"]
  }
}

bg.js

browser.menus.create({
  id: "gglSearch",
  title: "Search in new tab.",
  contexts: ["selection"],
});

browser.menus.onClicked.addListener(async function (info, tab) {
  if (info.menuItemId === "gglSearch") {
    // 从info参数直接获取选中文本
    const selectedTxt = info.selectionText;
    // 对文本进行URL编码,兼容特殊字符
    const encodedTxt = encodeURIComponent(selectedTxt);
    const searchUrl = `https://www.google.com/search?q=${encodedTxt}`;
    
    await browser.tabs.create({
      active: false,
      url: searchUrl,
      index: tab.index + 1
    });
  }
});

内容的提问来源于stack exchange,提问作者TGD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:46:02