如何将jquery.com的CDN中的jQuery用于Chrome扩展

我希望jQuery可以在内容脚本和控制台中访问(即,从网页 – 我相信,但我不确定,这就是你使用web_accessible_resources )。

注意:我同意下面的Zig Mandel ,他说你不应该使用CDN来加载jquery,因为它只能节省少量空间并且可能会导致CDN失效。 在这一点上,我只是想知道为什么这不起作用。

为什么这不起作用:

的manifest.json

  "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(或一些自定义调试库等), web_accessible_resources不是在content_scripts

专家系统回答了控制台的使用

你必须在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. 

您需要阅读有关Web可访问资源的更多信息,它们根本不适用于此。 建议的方法是将其作为扩展源的一部分。 帮助页面向您展示了如何执行此操作。 现在,如果由于某些奇怪的原因你真的想从cdn导入它,那么它是可能的。 您已添加必要的“自我”修改权限。 现在您需要修改内容页面html并在页面中手动注入脚本。 不值得,因为除了略微更小和更慢的扩展,你什么也得不到。