0

我正在尝试使用一个简单的 Angular 页面(除了加载模板之外没有 xhr),到目前为止这并不容易

Firefox 运行脚本/渲染 html 的方式和 XUL 的运行方式在某种程度上存在差异。据我所知,这些差异没有记录,因为我一直在寻找最后一个小时左右的时间来弄清楚为什么链接会unsafe:在它之前。可以猜到这是因为内容被认为是不安全的,但找不到任何文档。

我的主 html 页面位于 XUL 浏览器元素中,其类型设置为content-primary,源设置为chrome://myapp/content/index.html

主页和第一个加载的模板中的直接链接有效:

<a href='#/students/JON'>link in the template</a>

我可以点击它,它会加载详细信息模板并显示数据。

当我让 Angular 在 ng-repeat 中生成链接时,它不再起作用:

<a href="#/students/{{student.name}}">{{student.name}}</a>

该链接的href改为:unsafe:chrome://myapp/content/index.html#/students/JON

以下内容也发生了变化:

<a href='#/students/{{"JON"}}'>messed with by angular</a>

这表明 JS 生成的 href 被认为是不安全的,但以下工作正常:

  var a=document.createElement("a");
  a.href="#/students/JON";
  a.innerHTML="dynamic added link same url";
  document.body.appendChild(a);

单击该链接时,将加载详细信息模板并显示详细信息。

所以我的问题是:如何防止 XUL 认为链接不安全?他们都指向本地资源chrome://myapp/content/并将链接设置为chrome://myapp/content/index.html#/sudents/JON也不起作用(仍然不安全)。

另一个是:是否有关于 XUL 以不同方式呈现事物和执行 JS 与 Firefox 不同的良好文档?如果有这样的文件,那么它肯定包含不安全的部分,可能还有我会遇到的其他事情。

[更新] 感谢 Maier 先生,我发现这根本不是 XUL 问题。由于在 XUL 拒绝 location.replaceState 用于 chrome 内容然后返回状态 0 而不是 200 之前(就像在 Firefox 中一样),我认为它也与 XUL 相关。应该知道它是 Angular,因为添加 dom 元素有效(angular 不知道我添加了它们)并且未由 angular 处理的链接有效。要将 chrome:// 协议添加为受信任,我已完成以下操作:

angular.module('student', []).
  config(['$routeProvider','$compileProvider', 
    function($routeProvider,$compileProvider) {
      $compileProvider.urlSanitizationWhitelist(/^\s*(chrome|file):/);

稍后将删除文件,因为我目前正在使用它在 Firefox 中从磁盘打开文件以查看一切是否仍然有效

4

2 回答 2

2

与 XUL 本身无关。这是一个AngularJS 功能use),显然不能chrome:按预期工作。您必须解决此问题,例如将chrome:协议列入白名单。

于 2013-09-30T19:45:17.757 回答
2

在链接的 href 属性中使用绑定时,您应该使用ng-href而不是 href 以便评估绑定。例如

<a ng-href="#/students/{{student.name}}">{{student.name}}</a>

代替

<a href="#/students/{{student.name}}">{{student.name}}</a>

请参阅http://docs.angularjs.org/api/ng.directive:ngHref上的角度文档

于 2013-10-08T18:09:35.297 回答