我希望jQuery可以在内容脚本和控制台中访问(即,从网页 - 我相信,但我不确定,这就是你使用web_accessible_resources
)的原因。
注意:我同意下面的Zig Mandel,他声明你不应该使用CDN来加载jquery,因为它只会节省少量空间并留下CDN可能存在的可能性下。在这一点上,我只想知道为什么这不起作用。
为什么这不起作用:
"content_scripts": [
{
...
"js": ["foo.js", "https://code.jquery.com/jquery-1.10.1.min.js", "https://code.jquery.com/jquery-1.10.1.min.map"],
"run_at": "document_idle",
"all_frames": true
}
],
"content_security_policy": "script-src 'self' https://code.jquery.com; object-src 'self'",
"web_accessible_resources": [ "https://code.jquery.com/jquery-1.10.1.min.js", "https://code.jquery.com/jquery-1.10.1.min.map"],
加载扩展程序时收到的错误是:
--------------------------- Extension error
--------------------------- Could not load extension from 'C:\Users\[me]\Documents\GitHub\foo'. Could not load
javascript '' for content script.
--------------------------- OK
---------------------------
我何时需要 子> web_accessible_resources
中的jQuery(或某些自定义调试库等)与content_scripts
中的jQuery(
你必须在web_accessible_resources
中包含一个javascript文件,例如jQuery,然后注入它。在content_scripts
中包含jQuery仅供扩展中的其他内容脚本使用。如何注入代码(无论是否是本地代码)的示例:
function inject(script) {
if (script.match(/^http\:\/\//)){
var ssrc = document.createElement("script");
ssrc.setAttribute("src", script);
ssrc.addEventListener('load', function() {
var ssrc = document.createElement("script");
ssrc.textContent = "(" + callback.toString() + ")();";
document.body.appendChild(script);
}, false);
document.body.appendChild(script);
}
else {
var s = document.createElement('script');
s.src = chrome.extension.getURL(script);
s.onload = function () {
this.parentNode.removeChild(this);
};
(document.head || document.documentElement).appendChild(s);
}
}
[path_to_javascript, ...].forEach(inject) // put the javascript filename you'd like to inject in this array.
答案 0 :(得分:2)
您需要阅读有关网络可访问资源的更多信息,但它们根本不适用于此。 建议的方法是将其作为扩展源的一部分。帮助页面向您展示如何执行此操作。 现在,如果由于一些奇怪的原因你真的想从cdn导入它,那么它是可能的。您已添加必要的“自我”修改权限。现在您需要修改内容页面html并在页面中手动注入脚本。不值得,因为除了稍微小一点和较慢的扩展外你什么也得不到。