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

Chrome扩展Manifest v3复制到剪贴板功能故障求助

Manifest v3 扩展修复:直接设置聚焦文本框内容(替代剪贴板粘贴)

错误原因分析

你遇到的TypeError是因为Manifest v3的chrome.scripting.executeScriptAPI不再支持code参数——这个参数是Manifest v2中chrome.tabs.executeScript的用法,v3改用func(注入函数)或files(注入脚本文件)来传递要执行的代码逻辑。

解决方案:直接设置聚焦元素的值

放弃剪贴板中转的方式,直接向当前激活标签页注入脚本,找到聚焦的输入框并设置其值,同时触发页面所需的事件确保值变更被感知。

1. 定义注入函数

先写好要注入到页面的逻辑,用于定位聚焦元素并设置内容:

function setFocusedInputValue(text) {
  const activeEl = document.activeElement;
  // 处理普通输入框/文本域
  if (activeEl?.tagName.match(/^(INPUT|TEXTAREA)$/i)) {
    activeEl.value = text;
    // 触发input和change事件,兼容页面的表单校验或状态更新
    activeEl.dispatchEvent(new Event('input', { bubbles: true }));
    activeEl.dispatchEvent(new Event('change', { bubbles: true }));
  } 
  // 处理可编辑富文本元素
  else if (activeEl?.isContentEditable) {
    document.execCommand('insertText', false, text);
  }
}

2. 修正SendText函数

使用v3的正确API调用方式,传递函数和参数:

async function SendText(textToInsert) {
  // 获取当前激活的标签页ID
  const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
  if (!activeTab?.id) return;

  try {
    await chrome.scripting.executeScript({
      target: { tabId: activeTab.id },
      func: setFocusedInputValue, // 注入上面定义的函数
      args: [textToInsert] // 传递要插入的文本作为参数
    });
  } catch (err) {
    console.error('执行脚本失败:', err);
  }
}

3. 配置必要权限

在manifest.json中添加scripting权限,若需要对所有页面生效,还需添加activeTab或对应主机权限:

{
  "manifest_version": 3,
  "permissions": ["scripting", "activeTab", "contextMenus"],
  // 若需要特定页面生效,替换为具体URL
  "host_permissions": ["<all_urls>"]
}

优势说明

  • 无需剪贴板权限,避免污染用户剪贴板内容
  • 直接操作输入框,比剪贴板粘贴更高效稳定
  • 兼容原生密码输入框(部分页面的自定义密码组件可能需要额外适配)
  • 触发标准事件,确保页面能正确识别值的变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:15:06