我正在尝试使用一个简单的Angular页面(除了加载模板之外没有xhr)到目前为止it's not been easy。
不知何故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生成的hrefs被认为是不安全的,但以下工作正常:
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呈现不同内容并以不同于Firefox执行JS的良好文档?如果有一个这样的文件,那么它肯定包含不安全的部分,可能还有其他我将要遇到的事情。
[更新] 感谢Maier先生,我发现它根本不是XUL问题。因为之前XUL拒绝了chrome.replaceState用于chrome内容然后返回状态0而不是200(就像在Firefox中)我认为它也是XUL相关的。应该知道它是Angular,因为添加dom元素工作(角度不知道我添加了它们)和未处理角度工作的链接。要将chrome://协议添加为可信任,我已完成以下操作:
angular.module('student', []).
config(['$routeProvider','$compileProvider',
function($routeProvider,$compileProvider) {
$compileProvider.urlSanitizationWhitelist(/^\s*(chrome|file):/);
稍后将删除文件,因为我现在正在使用它来从Firefox中的磁盘打开文件,看看是否一切仍然有效
答案 0 :(得分:2)
与XUL本身无关。这是一个AngularJS feature(use),显然不能按预期在chrome:
中使用。你必须解决这个问题,例如:通过白名单列出chrome:
protocol。
答案 1 :(得分:2)
在链接的href属性中使用绑定时,应使用 ng-href 而不是href,以便评估绑定。 e.g。
<a ng-href="#/students/{{student.name}}">{{student.name}}</a>
而不是
<a href="#/students/{{student.name}}">{{student.name}}</a>
处的角度文档