我的Chrome扩展程序有两个文件:内容脚本和后台脚本。我还需要将jQuery添加到CDN的内容脚本中,并将lodash添加到CDN的后台脚本中。
在我的 list 中,我试图像这样从CDN添加lodash:
"background": {
"scripts": ["background.js", "https://cdn.jsdelivr.net/lodash/4.13.1/lodash.min.js"]
},
"content_security_policy": "script-src 'self' https://cdn.jsdelivr.net; object-src 'self'"
但这没有帮助。
我的内容文件从后台文件注入(inject)到页面中:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
if (changeInfo.status == 'complete') {
chrome.tabs.insertCSS(null, {file: "mainStyles.css"});
chrome.tabs.executeScript(null, {
code: 'var config = ' + JSON.stringify(config)
}, function() {
chrome.tabs.executeScript(null, { file: "https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js" }, function() {
chrome.tabs.executeScript(null, { file: "content.js" })
});
});
}
});
如您所见,我尝试从cdn包含jQuery,但是这种方式也不包含在内。
也许有人知道该怎么做?
提前谢谢了!
最佳答案
您可以从外部资源获取脚本,但这不是here所述的首选方法。
此外,您不应该这样使用background
标记。 Source
最好下载扩展并将其与所需的库 bundle 在一起,然后将其作为content_script获得。
来自我的manifest.json
的示例,用于在YouTube上运行的扩展程序:
"content_scripts": [ {
"matches": ["http://*.youtube.com/*", "https://*.youtube.com/*"],
"js": ["jquery.js", "content.js"]
}],
如果您必须使用一些外部脚本,我发现最好使用一点技巧。
通常的想法是,它在当前网页的范围内执行一段JS代码,并使用所需的脚本添加
<script>
标记。这是一个扩展的摘录,其中要求包含一些我们专有的js:
chrome.tabs.executeScript(tab.id, {code:
"document.body.appendChild(document.createElement('script')).src = 'https://example.com/script.js';"
});
chrome是个好人,就执行它。