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

JC *_*dan 15 javascript jquery google-chrome sandbox google-chrome-app

我正在开发一个谷歌Chrome 打包应用程序,当我把沙盒放入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"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

onclick我的锚标签上的事件有效,应用程序的流程已完成,除此之外,CSS样式表中的图标无法加载.

error从控制台得到了一个

File not found ,

但那些只是字体所以对我来说很好,

最大的问题是,iframe中的视频无法播放,而且我在Font之前得到了额外的错误:

VIDEOJS:错误:(代码:4 MEDIA_ERR_SRC_NOT_SUPPORTED)无法加载媒体,因为服务器或网络出现故障或者格式不受支持.

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

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

但是,当我点击/单击我的锚点标记,其中有一个点击事件在js中加载一个新函数我得到以下控制台错误:

拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"default-src'self'blob:filesystem:chrome-extension-resource:".要么是'unsafe-inline'关键字,哈希('sha256 -...'),要么是nonce('nonce -...')来启用内联执行.另请注意,'script-src'未显式设置,因此'default-src'用作后备.

很抱歉很长的细节,

我只需要帮助,因为我已经在这里呆了3天了.

kai*_*ris 49

回答您的非沙箱相关问题:

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

<button onclick="myFunction()">Click me</button>
Run Code Online (Sandbox Code Playgroud)

简而言之,Chrome应用和扩展程序中不允许这样做.

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

很长的故事:

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

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

  • 是的,我忘记了内联 javascript 是不允许的,但是我如何获得被点击的锚标签的 ID?而ID是动态的.. (2认同)
  • 它是动态的,因为一切都来自 POST (2认同)
  • 请注意,&lt;script src=xx&gt; 必须位于&lt;button&gt; 之后,否则脚本会在按钮显示之前运行,因此您将无法向其添加事件侦听器。 (2认同)