Во-первых, ваш код на C++ действительно plugin или XPCOM component, возможно, установлен как часть extension? Похоже, что это позже.
Если это так, его нельзя использовать из ненадежного JS-кода - любой веб-страницы или локального файла HTML. Он полностью используется из привилегированного кода, наиболее распространенным типом которого является код extension.
Вы работаете над этой проблемой при создании компонента с помощью вызова enablePrivilege('UniversalXPConnect')
. Это не рекомендуется, если это не будет распространено среди пользователей (так как этот вызов вызывает путаницу и если вы предпочитаете всегда разрешать файлу: // скрипты использовать XPCOM, это может быть проблема безопасности, поскольку не все локальные страниц доверяют - считайте сохраненные веб-страницы).
Ваш отказ Write
по той же причине - файл: // страницам не доверяют использовать компоненты XPCOM. Вероятно, вы можете заставить его работать, если добавить еще один вызов enablePrivilege
в ту же функцию, что и сам вызов Write.
В зависимости от ситуации может быть лучшее решение.
Если ваши файлы должны считаться доверенными, вы можете упаковать их как расширение и получить к ним доступ через URL-адрес chrome: //. Это дает код в этих разрешениях страниц для вызова любого компонента XPCOM, включая ваши.
Если методы компонента безопасны для использования с любой страницы или если среда контролируется, а в браузере не загружены ненадежные страницы, вы можете сделать свой компонент доступным для контента (для поиска nsSidebar можно найти в файле mozilla code, а также для nsISecurityCheckedComponent
).
О, и если у вас нет хороших ответов здесь, вы обязательно должны попробовать группы новостей mozilla/списки рассылки.
[изменить ответ в ответ] Рассмотрите возможность ввода кода, который должен вызвать компонент в сценарии chrome: //. В качестве альтернативы вы должны «благословить» свои страницы привилегиями chrome, используя код, например this (обратите внимание, что он делает все, что вам нужно, - отменяя привилегии chrome).
Вы действительно хотите отметить этот «C++»? Возможно, «Javascript» будет лучше подходит ... Что касается актуального вопроса, извините, я понятия не имею :( – 2008-09-25 11:18:34
Я отмечен как C++, потому что это плагин C++, и, надеюсь, ответы будут ориентированы на C++. – 2008-09-26 14:22:11