Во-первых, действительно ли ваш код C ++ является плагином или XPCOM-компонентом , возможно установленным как часть расширения ? Похоже, это позже.
Если это так, его нельзя использовать из ненадежного кода JS - любой веб-страницы или локального HTML-файла. Он полностью применим из привилегированного кода, наиболее распространенным типом которого является расширение код.
Вы решаете эту проблему при создании компонента с помощью вызова enablePrivilege('UniversalXPConnect')
. Это на самом деле не рекомендуется, если только это не будет распространяться среди пользователей (поскольку этот вызов вызывает запутывающее окно и если вы устанавливаете предпочтение всегда разрешать file: // сценарии используют XPCOM, это может быть проблемой безопасности, поскольку не все локальные страницы являются доверенными - подумайте о сохраненных веб-страницах).
Ваш вызов Write
не выполнен по той же причине - file: // страницам не доверяют использовать компоненты XPCOM. Вы, вероятно, сможете заставить его работать, если добавите еще один вызов enablePrivilege
в той же функции, что и сам вызов Write.
В зависимости от ситуации может быть лучшее решение.
Если ваши файлы должны рассматриваться как доверенные, вы можете упаковать их как расширение и получить к ним доступ через URL-адрес chrome: //. Это дает кодам на этих страницах разрешения для вызова любого компонента XPCOM, включая ваш.
Если методы компонента безопасны для использования с любой страницы или если среда контролируется, и в браузер не загружаются ненадежные страницы, вы можете сделать свой компонент доступным для контента (найдите nsSidebar в код mozilla для примера, а также для nsISecurityCheckedComponent
).
О, и если вы не получили здесь хороших ответов, вам определенно следует попробовать группы новостей / списки рассылки mozilla.
[править в ответ на комментарий] Подумайте над тем, чтобы поместить код, необходимый для вызова компонента, в скрипт chrome: //. Кроме того, вы должны иметь возможность «благословлять» свои страницы привилегиями Chrome, используя код, подобный this (обратите внимание, что он делает противоположное тому, что вам нужно - отбрасывая привилегии Chrome).