Xpoint
   [напомнить пароль]

Использвоние XSLT document() в расширении

Метки: [без меток]
2008-09-16 11:42:48 [обр] archimag[досье]

Расширение работает с внешним RESTfull-сервисом. Обращение через XMLHttpRequest к этому сервису проходит нормально, но попытка вызвать функцию XSLT document() для url данного сервиса заканчивается ошибкой:

"Ошибка системы безопасности: содержимое «moz-nullprincipal:{a332815e-37cf-43ae-a76b-2c7961c6602f}» не имеет права загружать данные из http://myservice/mydata."

Загружать данные через XMLHttpRequest, а потом прогонять через XSLT не получится: функция document() вызывается для уточнения данных (в случае необходимости) по мере обработки исходного документа, соответствующий обработчик на JavaScript будет неприемлемо сложным.

Тот же самый кода, используемый в качестве remote XUL приложения работает отлично.

Можно ли как-нибудь победить?

спустя 20 дней [обр] Владимир Палант(434/4445)[досье]
XMLHttpRequest должен загружать ровно один URL, а не еще десяток дополнительных, так что вряд ли это можно считать ошибкой Mozilla. Иначе говоря — "побеждать" не надо, надо использовать другой подход.
спустя 4 часа 29 минут [обр] archimag[досье]

> XMLHttpRequest должен загружать ровно один URL, а не еще десяток дополнительных
Как это понимать?

Проблема в том, что если модель безопасности позволяет выполнять запрос к url из javascript, то нет никаких причин запрещать доступ к этому url из xslt (с помощью штатных, стандартных средств). Но наблюдается совершенно нелогичная ситуация, когда xslt-код оказывается очень ограниченным в правах при выполнении внутри chrome...

спустя 2 часа 14 минут [обр] Владимир Палант(434/4445)[досье]
XSLT выполняет не chrome, а сам XMLHttpRequest — оттого и nullprincipal.
спустя 15 часов [обр] archimag[досье]

> XSLT выполняет не chrome, а сам XMLHttpRequest
Это как?

var processor = new XSLTProcessor();

var stylesheet = document.implementation.createDocument(null, null, null);
stylesheet.async = false;
stylesheet.load("chrome://myextension/myxsl.xsl");
processor.importStylesheet(stylesheet);

processor.transformToDocument(myxmldata);

Когда этот код загружается с web (как и xslt), то никаких проблем нет, все отлично работает. Проблемы начинаются, когда этот код выполняется как часть расширения.

спустя 14 часов [обр] Владимир Палант(434/4445)[досье]
Вот это уже совсем другое дело. Думаю, что баг.
Powered by POEM™ Engine Copyright © 2002-2005