Chrome 扩展:拒绝执行内联脚本,但没有内联脚本?

Ben*_*Ben 5 javascript google-chrome-extension content-security-policy reactjs

我正在尝试使用 reactjs 构建一个非常基本的 chrome 扩展。但是,我收到以下错误:

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

我不明白这是从哪里来的,因为我似乎没有任何内联脚本。

newtab.html:

<!DOCTYPE html>
<html>
  <head>
    <title>New Tab</title>
    <script src="react.js"></script>
    <script src="react-dom.js"></script>
    <script src="babel.js"></script>
    <script type="text/jsx" src="test.jsx"></script>
  </head>
  <body>
    <div id='root'></div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

测试.jsx:

import React from "react";
import ReactDOM from "react-dom";

class Hello extends React.PureComponent {
  render() {
    return (
      <div>
        <h1>Hello!</h1>
      </div>
    );
  }
}

const element = <Hello />;
ReactDOM.render(
  element,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

清单.json:

{
  "manifest_version": 2,

  "name": "SuperBasicReact",
  "description": "Just trying to make this work",
  "version": "0.1",

  "chrome_url_overrides": {
    "newtab": "newtab.html"
  },

  "browser_action": {
    "default_title": "SuperBasicReact"
  },

  "permissions": [
    "http://*/*",
    "https://*/*"
  ],

  "content_scripts": [{
    "matches": ["http://*/", "https://*/"],
    "js": ["test.jsx", "babel.js"]
  }],

  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'; default-src 'self'"


}
Run Code Online (Sandbox Code Playgroud)

我正在使用 chrome 版本 65.0.3325.162。

任何和所有帮助将不胜感激。

编辑:

在 ReactJS Chrome 扩展中看到了“拒绝执行内联脚本”,即使没有内联脚本,但是,我实际上没有在该链接中看到解决方案。

Mot*_*ets 3

问题来自浏览器脚本中 Babel 的工作方式。由于 CSP 对扩展的限制,您必须在本地使用 Babel 转译 jsx 代码,并且仅将转译后的 (js) 文件添加到 html 中。

您可以从命令行运行 Babel。请参阅此处的相关指南。对于后期开发,可以考虑使用带有 babelify 插件的 Browserify 等工具。请参阅此处的用法示例