Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№120-01-2011 18:22:46

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 3.6

Security exception при XSLT-преобразовании документа из chrome://

Сабж. Имеются: xml-документ и xslt-шаблон, оба берутся из chrome/content расширения. При попытке применить transformToDocument выдается, что

Ошибка системы безопасности: содержимое «moz-nullprincipal:{a9e68eaf-22ff-468f-a4af-89358cc0ecf6}» 
не имеет права загружать chrome://foo/content/bar.xml или ссылаться на него.

Т.е. речь не о шаблоне, а о самом xml, который в реальной ситуации давным-давно загружен (посредством XMLHTTPRequest) без всяких сообщений об ошибках.
Далее, несмотря на сообщение об ошибке, трансформация всё же выполняется. Я мог бы:
1) просто задавить ошибку пустым catch;
2) вместо transformToDocument использовать transformToFragment для корневого узла, и потом у нужного документа подменять корневой узел на результат трансформации. Но всё-так хотелось бы знать, в чём причина вышеупомянутой ошибки.

P.S. Указания типа

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

не помогают.

Отредактировано hydrolizer (20-01-2011 18:23:53)

Отсутствует

 

№220-01-2011 18:59:17

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 4.0

Re: Security exception при XSLT-преобразовании документа из chrome://

Может, вы используете

Выделить код

Код:

var processor = new XSLTProcessor();

вместо

Выделить код

Код:

var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"]
               .createInstance(Components.interfaces.nsIXSLTProcessor);

?

Отсутствует

 

№321-01-2011 03:43:56

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 3.6

Re: Security exception при XSLT-преобразовании документа из chrome://

luitzen

Пробовал использовать и в том, и в другом варианте - без толку. transformToDocument выдаёт вышеуказанную ошибку - при том, что трансформация всё-таки производится; transformToFragment ошибок не выдаёт.

Отсутствует

 

№421-01-2011 09:03:11

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 3.6

Re: Security exception при XSLT-преобразовании документа из chrome://

В процессе выяснилось следующее: сообщение о вышеуказанной ошибке практически идентично сообщению об ошибке парсера при парсинге документа, если парсер был создан явным вызовом конструктора. Если парсер был создан через 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, то иначе и не получится) передавать на трансформацию - тогда всё отрабатывает без ошибок.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]