>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Security exception при XSLT-преобразовании документа из chrome:// http://forum.mozilla-russia.org/viewtopic.php?id=47845 |
hydrolizer > 20-01-2011 18:22:46 |
Сабж. Имеются: xml-документ и xslt-шаблон, оба берутся из chrome/content расширения. При попытке применить transformToDocument выдается, что Ошибка системы безопасности: содержимое «moz-nullprincipal:{a9e68eaf-22ff-468f-a4af-89358cc0ecf6}» Т.е. речь не о шаблоне, а о самом xml, который в реальной ситуации давным-давно загружен (посредством XMLHTTPRequest) без всяких сообщений об ошибках. Далее, несмотря на сообщение об ошибке, трансформация всё же выполняется. Я мог бы: 1) просто задавить ошибку пустым catch; 2) вместо transformToDocument использовать transformToFragment для корневого узла, и потом у нужного документа подменять корневой узел на результат трансформации. Но всё-так хотелось бы знать, в чём причина вышеупомянутой ошибки. P.S. Указания типа netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); не помогают. |
luitzen > 20-01-2011 18:59:17 |
Может, вы используете вместо Выделить код Код:var processor = Components.classes["@mozilla.org/document-transformer;1?type=xslt"] .createInstance(Components.interfaces.nsIXSLTProcessor); ? |
hydrolizer > 21-01-2011 03:43:56 |
luitzen Пробовал использовать и в том, и в другом варианте - без толку. transformToDocument выдаёт вышеуказанную ошибку - при том, что трансформация всё-таки производится; transformToFragment ошибок не выдаёт. |
hydrolizer > 21-01-2011 09:03:11 |
В процессе выяснилось следующее: сообщение о вышеуказанной ошибке практически идентично сообщению об ошибке парсера при парсинге документа, если парсер был создан явным вызовом конструктора. Если парсер был создан через createInstance - всё в порядке. Что, кстати, вносит еще больше путаницы, поскольку вот здесь написано следующее:
- т.е. вроде как получается с точностью до наоборот: createInstance наследует principals контекста вызова, а вот при new DOMParser() и последующем вызове методов парсинга просходит предварительный неявный вызов init() с передачей в него null principal. |