Страницы: 1
Сабж. Имеются: xml-документ и xslt-шаблон, оба берутся из chrome/content расширения. При попытке применить transformToDocument выдается, что
Ошибка системы безопасности: содержимое «moz-nullprincipal:{a9e68eaf-22ff-468f-a4af-89358cc0ecf6}»
не имеет права загружать chrome://foo/content/bar.xml или ссылаться на него.
P.S. Указания типа
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
Отредактировано hydrolizer (20-01-2011 18:23:53)
Отсутствует
Может, вы используете
вместо
var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"] .createInstance(Components.interfaces.nsIXSLTProcessor);
?
Отсутствует
luitzen
Пробовал использовать и в том, и в другом варианте - без толку. transformToDocument выдаёт вышеуказанную ошибку - при том, что трансформация всё-таки производится; transformToFragment ошибок не выдаёт.
Отсутствует
В процессе выяснилось следующее: сообщение о вышеуказанной ошибке практически идентично сообщению об ошибке парсера при парсинге документа, если парсер был создан явным вызовом конструктора. Если парсер был создан через createInstance - всё в порядке. Что, кстати, вносит еще больше путаницы, поскольку вот здесь написано следующее:
When a DOMParser is instantiated by calling new DOMParser(), it inherits the calling code's principal (except that for chrome callers the principal is set to the null principal) and the documentURI and baseURI of the window the constructor came from.
.....
If you instantiate a DOMParser by calling createInstance(), and you don't call the DOMParser's init() method, attempting to initiate a parsing operation will automatically call init() on the DOMParser with a null principal and null pointers for documentURI and baseURI.
- т.е. вроде как получается с точностью до наоборот: createInstance наследует principals контекста вызова, а вот при new DOMParser() и последующем вызове методов парсинга просходит предварительный неявный вызов init() с передачей в него null principal.
Касательно же ситуации с XSLTProcessor - видимо, несмотря на то, что ему дается уже разобранный DOM, он всё равно пытается его как-то по-своему перепарсить, для чего создает внутри своих методов эксемпляр парсера, инициализарованный с null-principal. Поскольку методов для задания security context я у XSLTProcessor не обнаружил, то остановился на следующем: DOM от XMLHttpRequest сериализовать в string, и через парсер, созданный посредством createInstance (а поскольку код, отвечающий за сеарилизацию и парсинг я вынес в jsm, то иначе и не получится) передавать на трансформацию - тогда всё отрабатывает без ошибок.
Отсутствует
Страницы: 1