没有内联脚本,仍然得到"由于内容安全策略指令而被拒绝:“;脚本src'self'&”;
No inlined script, still getting "Refused due to Content Security Policy directive: "script-src 'self'"
我正在尝试为Chrome创建一个类似谷歌阅读器的浏览器操作扩展,以便与我可以访问API的其他RSS阅读器一起使用。这会在浏览器操作中产生X个链接,每个链接都需要打开一个带有API指定的URL的新选项卡。
然而,每当单击链接时,我都会收到以下错误消息:"Refused to execute JavaScript URL because it violates the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:"."
我一直在阅读主要出现在内联脚本上的错误消息,但我没有任何明确的onLoads、内联脚本标记等。
manifest.json:
{
"name": "A reader extension",
"version": "0.0.1",
"manifest_version": 2,
"description": "Desc",
"homepage_url": "homepage.com",
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"default_locale": "en",
"background": {
"page": "src/bg/background.html",
"persistent": true
},
"browser_action": {
"default_icon": "icons/icon19.png",
"default_title": "browser action",
"default_popup": "src/browser_action/browser_action.html"
},
"permissions": [
"cookies",
"https://www.a-reader.com/api/1/*",
"http://www.a-reader.com/go?*"
]}
background-action.js
function list() {
$.getJSON('https://www.a-reader.com/api/current/', function (data) {
var items = [];
$.each(data, function (key, val) {
if (val.idx < val.max_idx) {
var line = "<tr class='listEntry'>" +
"<td> " +
"<a class='listLink' id='ID' data-uri='URI' href='javascript:void(0)'>BANNER</a> " +
"</td> " +
"<td> [UNREAD_ENTRIES] </td>" +
"</tr>";
items.push(line.replace("ID", val.slug).
replace("URI", "http://www.a-reader.com/boilerplate?=" + val.uri).
replace("NAME", val.name).
replace("BANNER", val.banner.
replace("UNREAD_ENTRIES", "" + val.unread;
}
});
$('<table/>', {
'class': 'entry-list',
html: items.join('')
}).appendTo('#mainPopup');
});
}
function newTabForEntry(entryUrl) {
chrome.tabs.create({'url': entryUrl});
}
document.addEventListener('DOMContentLoaded', function () {
list();
document.querySelectorAll('.entryLink', function (entryLinks) {
for (var i = 0, len = entryLinks.length; i < len; i++) {
document.getElementById(i.id).addEventListener('click', function (e) {
console.info(e);
newTabForEntry(e.target.dataset.uri);
});
}
});
});
browser-action.html
<!doctype html>
<html>
<head>
<style type="text/css">
body {
max-height: 450px;
width: 200px;
background-color: #F6F7F4;
overflow: hidden;
}
a:link {
color: #F6F7F4;
text-decoration: none;
font-weight: bold;
}
a:visited {
color: #F6F7F4;
text-decoration: none;
font-weight: bold;
}
a:hover {
color: #F6F7F4;
text-decoration: none;
font-weight: bold;
}
::-webkit-scrollbar {
display: none;
}
#mainPopup {
font-family: Helvetica, Ubuntu, Arial, sans-serif;
}
.listEntry {
color: #F6F7F4;
background-color: #483F36;
}
#banner {
background-color: #483F36;
}
</style>
<script type="text/javascript" src="../../js/jquery/jquery-2.0.0.js"></script>
<script type="text/javascript" src="../../js/browser-action.js"></script>
</head>
<body>
<div id="banner">
<img src="../../icons/reader-logo.png" width="124" height="25"/>
</div>
<div id="mainPopup">
</div>
</body>
</html>
这些是否隐含地创建了一个内联脚本,或者我以其他方式把它搞砸了?
我确实把事情搞砸了一点,尽管原因有点不清楚。原来罪魁祸首是"BANNER"。Chrome将javascript:void(0)调用定义为内联脚本调用。将href切换为'#'删除了错误消息。没有打开任何选项卡的原因是,有人试图将行为添加到(ajax)方法getJSON()中异步创建的组件中,该方法当时尚未完成。循环的快速移动解决了问题,现在一切如愿以偿。
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 借助asp.net验证或java脚本对多个文本进行验证
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- Java脚本时间添加
- 不显示带有本地json文件数据的谷歌地图脚本
- Jquery 脚本错误“访问被拒绝”
- 脚本 5:访问被拒绝 ie8.在 IE11 中使用 IE8 模拟器
- 拒绝加载脚本Chrome扩展
- 权限被拒绝,forever.js为bash脚本
- Chrome 扩展程序“拒绝加载脚本,因为它违反了以下内容安全策略指令”
- Python CGI 脚本拒绝包含数据 URI (403) 的数据
- 为什么我的Mac应用程序中的WebView html拒绝加载JQuery或任何外部脚本
- 没有内联脚本,仍然得到"由于内容安全策略指令而被拒绝:“;脚本src'self'&”;
- .htaccess拒绝从脚本下载文件
- Chrome 拒绝在注入的脚本中声明变量
- Javascript "SCRIPT5:拒绝访问"从脚本打开PDF
- Android webview拒绝执行内联脚本
- 拒绝加载脚本,因为它违反了以下内容安全策略指令
- 跨站点脚本Iframe权限被拒绝的问题
- avoid alert拒绝执行JavaScript脚本.在请求中找到的脚本源代码