2013-09-30 4 views
0

Я пытаюсь использовать простую Угловую страницу (нет xhr кроме загрузки шаблонов) и до сих пор it's not been easy.XULrunner добавляет небезопасные: перед ссылками при использовании Angular

Как-то есть различия в том, как Firefox запускает скрипт/визуализирует html и как XUL будет. Эти различия недокументированы, насколько я знаю, так как я искал последний час или около того, чтобы выяснить, почему ссылка должна была иметь unsafe:. Можете догадаться, потому что контент считается небезопасным, но не может найти никакой документации для него.

Мой основной HTML страницы в браузере элемента XUL с его тип установлен content-primary и это источник установлен chrome://myapp/content/index.html

Прямые ссылки на главной странице и в первом загруженном шаблоне работы:

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

Я могу щелкнуть по нему, и он загрузит шаблон детали и покажет данные.

Когда я позволяю Угловая генерировать ссылки в нг-повторить это больше не работает:

<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 рендеринге вещей по-другому и выполнение JS по-другому, чем Firefox? Если есть такой документ, то он наверняка содержит небезопасную часть и, возможно, другие вещи, с которыми я столкнусь.

[обновление] Благодаря господину Майеру я выяснил, что это не проблема XUL. Так как до того, как XUL отказывался от location.replaceState для содержимого хром, а затем возвращал статус 0 вместо 200 (как в Firefox), я предположил, что это тоже связано с XUL. Должен был знать, что он был угловатым, потому что добавление элементов Dom (работа с угловыми элементами не знала, я добавил их) и ссылки, которые не обрабатывались угловыми работами. Для того, чтобы добавить хром: // протокол как доверенный я сделал следующее:

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

Снимут файл позже, как я использую его в данный момент, чтобы открыть файл с диска в Firefox, чтобы увидеть, если все еще работы

ответ

2

Ничего общего с XUL per-se. Это AngularJS feature (use), который не работает в chrome:, как и ожидалось. Вам придется исправить это, например. по белой листинге chrome: protocol.

+0

Спасибо так много. Теперь работает. – HMR

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

+0

Хорошая точка, позаботится об этих ссылках. – HMR

+1

Также для тех, кто перемещается в Angular 1.2, обратите внимание, что $ compileProvider.urlSanitizationWhitelist() заменен $ compileProvider.aHrefSanitizationWhitelist() – Jazzuzz

 Смежные вопросы

  • Нет связанных вопросов^_^