Google chrome extension 通过扩展javascript访问扩展样式表

Google chrome extension 通过扩展javascript访问扩展样式表,google-chrome-extension,Google Chrome Extension,我有一个chrome内容脚本扩展,其中包括一个css文件mystyle.css,它被捆绑到扩展CRX中。据我所知,有两种方法可以将此样式表注入页面内容 无论样式表以何种方式注入页面,我都无法访问与该样式表关联的CSS规则 注射方法1: // From a script running in the context of background.html: chrome.tabs.insertCSS(tab.id, {file: 'mystyle.css'}); 注射方法2: // From a

我有一个chrome内容脚本扩展,其中包括一个css文件mystyle.css,它被捆绑到扩展CRX中。据我所知,有两种方法可以将此样式表注入页面内容

无论样式表以何种方式注入页面,我都无法访问与该样式表关联的CSS规则

注射方法1:

// From a script running in the context of background.html:
chrome.tabs.insertCSS(tab.id, {file: 'mystyle.css'});
注射方法2:

// From a script running in the context of the content, already
// injected by the background page via chrome.tabs.executeScript.
var fileref = document.createElement("link");
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href",
    chrome.extension.getURL('mystyle.css'));
通过在后台页面注入的内容上下文中运行的JavaScript,当使用方法1注入样式表时,我无法在document.styleSheets中列出的样式表列表中看到样式表。当使用方法2注入时,它会以chrome扩展名://href列出,但该工作表的cssRules属性始终为null

对于链接到其他域的文档的CSS表单,我希望这样做,但我的脚本应该可以访问与我的扩展相关的chrome extension://uri


我目前正在研究的途径是对CSS文件资源内容的原始字符串访问,我可以为其构造一个chrome扩展名://URI。我不知道这是否比其他尝试更有效,但似乎应该如此

你延期的目的是什么?只是传递原始数据?方法1显然会产生一个不可见的样式表。它类似于内容脚本。方法2失败,因为chrome的同源策略生效-extension://... 另一页上的资源。因此,.cssRules为空。@RobW关于跨域策略,我不理解的是,试图访问chrome的JavaScript-extension://... 资源实际上是来自扩展的脚本。如果脚本与扩展打包在一起,它应该能够访问扩展资源。我现在意识到,我对跨域行为的期望可能适用于后台页面的脚本,但不适用于内容脚本。我目前正试图实现以这种方式访问stylsheets的总体目标,即从打包的扩展中提取一个工作表,并将其插入WebKitShadowRoot元素,以便实现一个适当范围的UI组件,该组件被注入到宿主页面中,但是不受CSS污染的影响。chrome.tabs.executeScript无法在chrome扩展:协议中注入代码。因此,您可能没有使用方法2在扩展中的页面/选项卡上注入代码。因为您是在一个不是扩展名的页面上注入代码,.cssRules为null。如果不是这样,请用一个小而完整的测试用例更新您的问题,以演示您的问题。