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

如何在Chrome扩展的注入脚本中获取Extension ID?

问题描述

我尝试了多种方法,包括参考内容脚本访问页面上下文变量的相关教程,但都没能解决问题。我原本的脚本注入方式如下:

var script = document.createElement('script');
script.src = chrome.runtime.getURL('injected.js');
script.onload = function () {
    this.remove();
};

(document.head || document.documentElement).appendChild(script);

我的需求是在web_accessible_resources对应的文件中获取扩展ID(Extension ID)用于发送消息,不想硬编码,希望直接使用chrome.runtime.id的结果。但内联脚本因策略限制报错,尝试通过sha值放行的方式也未成功,特此寻求帮助。

已验证的解决方案

以下是两种可行的实现方式:

方法一

content.js 代码片段:

var script = document.createElement('script');
script.src = chrome.runtime.getURL('injected.js');
script.id = chrome.runtime.id;
script.classList.add('rmd-block-extension');
(document.head || document.documentElement).appendChild(script);

injected.js 代码片段:

(function (XMLHttpRequest) {
    var XHR = XMLHttpRequest.prototype;
    var extensionID = '';

    XHR.send = function (postData) {
        this.addEventListener('load', function () {
            try {
                var extensionSrc = document.querySelector('script.rmd-block-extension');
                if (extensionSrc) {
                    extensionID = extensionSrc.id;
                    extensionSrc.remove();
                }
            } catch (err) {
            }
        });
    };
})(XMLHttpRequest);

该方法可成功获取Extension ID。

方法二(更优)

content.js 代码片段:

var script = document.createElement('script');
script.src = chrome.runtime.getURL('injected.js');
script.id = chrome.runtime.id;

(document.head || document.documentElement).appendChild(script);

injected.js 代码片段:

var extensionID = '';
var script = document.currentScript;

if (script) {
    extensionID = script.id;
    script.remove();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:43:29