如何在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
相关产品推荐
相关产品推荐

