我正在尝试构建chrome扩展,但出于某种原因,我似乎无法向SoundCloud发出API请求或加载Jquery。
我知道这是因为:
我将加载jquery:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
在我的控制台中,我会收到
Failed to load resource: net::ERR_FAILED
chrome-extension://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
同样的事情发生在soundcloud api上:
chrome-extension://api.soundcloud.com/tracks?q=buskers&client_id=xxxxxxxxxx&format=json&_status_code_map[302]=2
为什么chrome-extension//
会一直停留在网址前面,如何阻止它?
答案 0 :(得分:3)
根据内容脚本策略(CSP),脚本资源只能从扩展程序包中加载。这将使扩展更安全,并确保扩展只执行您批准的代码。
解决方案1:下载特定版本的jQuery文件,将其包含在您的包中,然后将其加载到文档中。
<script src="js/jquery.1.11.1.min.js"></script>
解决方案2:实际上,您可以通过在清单文件中定义资源来源的白名单来放宽限制。如果由于某些原因需要加载外部js文件,可以参考this以获取更多详细信息。
"content_security_policy": "script-src 'self' https://ajax.googleapis.com https://api.soundcloud.com/tracks?q=buskers&client_id=xxxxxxxxxx&format=json&_status_code_map[302]=2; object-src 'self'"
注意:
白名单资源仅允许通过以下协议加载: HTTPS , chrome-extension 和 chrome-extension-resource 。如果要采用白名单解决方案,请使用https加载外部库。
如果要在白名单中定义多个域,请使用空格将域彼此分开。
"content_security_policy": "script-src 'self' https://domain1.com https://domain2.com;"
答案 1 :(得分:1)
试试这个
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>