拒绝执行内联事件处理程序,因为它违反了CSP.(沙盒)

Refused to execute inline event handler because it violates CSP. (SANDBOX)

本文关键字:CSP 沙盒 事件处理 程序 因为 拒绝执行      更新时间:2023-10-11

我正在开发一个谷歌chrome打包的应用程序,当我将Sandbox放入manifest.json:时

 {
  "manifest_version": 2,
  "name": "WM32216",
  "version": "2.1",
  "minimum_chrome_version": "23",
  "permissions":["webview", "https://ajax.googleapis.com/*"],
  "sandbox":{
      "pages":["index.html"]
  },
  "app": {
    "background": {
      "scripts": ["main.js"]
    }
  }
}

我的锚标记上的onclick事件是有效的,并且应用程序的流程是完整的,除了CSS样式表中的图标不加载之外。

我从控制台上得到了一个error

File not found

但这些只是字体,所以对我来说没问题,

最大的问题是,iframe中的视频没有播放,我在字体之前出现了额外的错误,这些错误是:

VIDEOJS:错误:(代码:4 MEDIA_ERR_SRC_NOT_SUPPORTED)无法加载媒体,原因可能是服务器或网络出现故障,也可能是格式不受支持。

不允许加载本地资源:blob:null/b818b32c-b762-4bd9-。。。

当我删除manifest.json文件中的沙箱时,一切都很好,控制台中没有关于字体的错误,

但是,当我点击/点击我的锚标签时,它有一个点击事件来在js中加载一个新函数,我会得到以下控制台错误

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:;默认src"self"blob:filesystem:chrome扩展资源:"。启用内联执行需要"unsafe-inline"关键字、哈希("sa256-…")或nonce("once-…")。还请注意,"script src"未显式设置,因此使用"default src"作为回退。

很抱歉有太长的细节,

我只是需要帮助,因为我已经被困在这里三天了。

非沙箱相关问题的答案:

你的代码中有这样的东西:

<button onclick="myFunction()">Click me</button>

简而言之,这在chrome应用程序和扩展程序中是不允许的。

将其更改为以下内容,它将起作用:

  • html:

    <button id="myButton">Click me</button>
    <script src="script.js"></script>
    
  • script.js:

    document.getElementById("myButton").addEventListener("click", myFunction);
    function myFunction(){
      console.log('asd');
    }
    

长话短说:

在chrome应用程序中,内容安全策略不允许内联javascript。因此,您必须将javascript放在.js文件中,并将其包含在HTML中。

进一步阅读:https://developer.chrome.com/extensions/contentSecurityPolicy

相关文章: