首页 > 解决方案 > 无法从 HTML/EJS 文件运行外部 javascript

问题描述

我正在尝试在 HTML/EJS 页面内的外部文件中运行 javascript。代码如下:

<body onload="initialize()">

//HTML content

  <script src="/public/js/gallery.js"</script>

</body>

“initialize()”函数位于“gallery.js”文件中。问题是我不断收到错误消息:

“拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“script-src 'self'”。'unsafe-inline' 关键字、哈希 ('sha256-tPMkUWbNPBXQQ3rlbFhILb35szR89eQb3Z41bzLr+wQ=') 或随机数('nonce-...') 是启用内联执行所必需的。”

我在页面上的“head”标签中尝试了许多尝试修复。其中包括“<meta Content-Security-Policy: script-src 'self' 'unsafe-inline'">”、“Content-Security-Policy: script-src 'self'”和“meta http-equiv="content -安全策略内容=脚本-src"...

这太令人抓狂了……我花了好几个小时试图纠正这个问题。有人可以就问题所在提供一些解释......???我提前谢谢你。问候。

“gallery.js”文件内容如下:

addEventListener("load", initialize);

function initialize() {

//do stuff  

}

标签: javascripthtmlejscontent-security-policy

解决方案


通过禁用禁止内联脚本的 CSP 规则来解决这个问题并不是一个好主意。内联脚本是 XSS 攻击的主要载体。

相反,删除内联脚本并将等效功能放入.js文件本身。

onload="initialize()"从 HTML 中删除。

添加addEventListener("load", initialize)到 JS。


推荐阅读