5

对于我的 Chrome 扩展的选项页面,我想使用 Angular.js(仅用于选项页面,而不是用于扩展的背景 JS 或内容脚本),但将其包含在我的页面中并执行以下操作:

<!doctype html>
<html ng-app>
<head>
  <title>Shortkeys Options</title>
  <script src="../js/jquery.min.js" type="text/javascript"></script>
  <script src="../js/angular.min.js" type="text/javascript"></script>
  <script src="../js/options.js" type="text/javascript"></script>
  <link rel="stylesheet" href="../css/options.css" />
</head>

<body>
  <div ng-controller="OptionsCtrl">
    <div ng-repeat="key in keys"></table>
  </div>
</body>
</html>

...在开发工具控制台中引发此错误并且没有运行:

Error: Code generation from strings disallowed for this context

我认为这是因为 Angular 试图将标签写入页面或分配内联事件处理程序或运行内联 JS 的东西,这在 Chrome 扩展中是不允许的,那么有什么办法解决这个问题吗?例如,我可以告诉 Angular 以某种方式避免使用内联 JS 吗?

4

1 回答 1

15

您可以manifest_version: 2通过在符合 CSP 的模式下指定该角度运行来使用。只需将ng-csp属性添加到<html>面板页面中。

所以你的 HTML 会是这样的:

<!doctype html>
<html ng-csp ng-app>
<head>
  <title>Shortkeys Options</title>
  <script src="../js/jquery.min.js" type="text/javascript"></script>
  <script src="../js/angular.min.js" type="text/javascript"></script>
  <script src="../js/options.js" type="text/javascript"></script>
  <link rel="stylesheet" href="../css/options.css" />
</head>

<body>
  <div ng-controller="OptionsCtrl">
    <div ng-repeat="key in keys"></table>
  </div>
</body>
</html>
于 2012-06-20T17:03:12.857 回答