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

Chrome扩展Manifest V3中如何在background.js获取页面EntryTool对象

解决Manifest V3中获取页面EntryTool对象的方法
  • 首先明确:background.js运行在扩展的独立后台上下文,和目标页面的上下文完全分离,所以直接在background.js里访问window根本不是页面的window,自然拿不到EntryTool。

  • 正确做法是用内容脚本(Content Script),它会注入到目标页面的上下文,能直接访问页面的全局对象:

    1. 在扩展的manifest.json里配置内容脚本,指定目标页面的匹配规则:
      "content_scripts": [
        {
          "matches": ["https://目标页面域名/*"], // 替换成实际页面的URL匹配规则
          "js": ["content.js"],
          "run_at": "document_idle" // 可选,控制注入时机
        }
      ]
      
    2. 创建content.js文件,获取EntryTool后通过消息传递给background.js:
      // content.js
      function checkEntryTool() {
        // 这里的window就是页面控制台中的window
        if (window.EntryTool) {
          // 注意:不能直接传递对象(跨上下文无法直接传递非序列化数据),需转成JSON字符串或提取所需属性
          chrome.runtime.sendMessage({
            type: "ENTRY_TOOL_DATA",
            data: JSON.stringify(window.EntryTool)
          });
        } else {
          // 若EntryTool是动态加载的,用定时器轮询检测
          setTimeout(checkEntryTool, 500);
        }
      }
      checkEntryTool();
      
    3. 在background.js里监听消息,接收EntryTool数据:
      // background.js
      chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
        if (message.type === "ENTRY_TOOL_DATA") {
          const entryTool = JSON.parse(message.data);
          // 此处处理拿到的EntryTool数据
          console.log(entryTool);
        }
      });
      
  • 注意事项:

    • 跨上下文只能传递可序列化的数据(字符串、数字、普通对象/数组等),如果EntryTool包含函数或不可序列化属性,需提取具体需要的属性传递,而非整个对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:52:35