XULrunner 添加不安全:在使用 Angular 时在链接之前

XULrunner adding unsafe: before links when using Angular

本文关键字:链接 Angular 添加 不安全 XULrunner      更新时间:2023-09-26

我正在尝试使用一个简单的 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不同的良好文档?如果有这样的文档,那么它肯定包含不安全的部分,可能还有我将要遇到的其他内容。

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

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

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

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

在链接的 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