Tout d'abord, votre code C++ est-il vraiment un plugin ou un XPCOM component, éventuellement installé dans le cadre d'un extension? On dirait que c'est le plus tard.
Si tel est le cas, il n'est pas utilisable à partir d'un code JS non fiable - une page Web ou un fichier HTML local. Il est entièrement utilisable à partir du code privilégié, dont le type le plus courant est le code extension.
Vous contournez ce problème lors de la création du composant à l'aide de l'appel enablePrivilege('UniversalXPConnect')
. Ce n'est pas vraiment recommandé, à moins que cela ne soit pas distribué aux utilisateurs (puisque cet appel ouvre une boîte confuse et si vous préférez toujours autoriser les scripts file: // à utiliser XPCOM, il peut s'agir d'un problème de sécurité. les pages sont fiables - pensez aux pages Web sauvegardées).
Votre appel Write
échoue pour la même raison - les fichiers: // ne sont pas approuvés pour utiliser les composants XPCOM. Vous pouvez probablement le faire fonctionner si vous ajoutez un autre appel enablePrivilege
dans la même fonction que l'appel Write lui-même.
Selon la situation, il peut y avoir une meilleure solution.
Si vos fichiers doivent être considérés comme fiables, vous pouvez les empaqueter en tant qu'extension et y accéder via une URL chrome: //. Cela donne au code de ces pages la permission d'appeler n'importe quel composant XPCOM, y compris le vôtre.Si les méthodes du composant peuvent être utilisées en toute sécurité depuis n'importe quelle page ou si l'environnement est contrôlé et qu'aucune page non fiable n'est chargée dans le navigateur, vous pouvez rendre votre composant accessible au contenu (recherchez nsSidebar dans mozilla code par exemple pour nsISecurityCheckedComponent
). Oh, et quand vous n'obtenez pas de bonnes réponses ici, vous devriez certainement essayer les newsgroups/mailing mozilla.
[modifier en réponse à un commentaire] Envisagez de placer le code qui doit appeler le composant dans un script chrome: //. Alternativement, vous devriez être en mesure de "bénir" vos pages avec les privilèges de chrome en utilisant le code comme this (notez qu'il fait le contraire de ce dont vous avez besoin - dépouillant les privilèges de chrome).
Etes-vous sûr de vouloir marquer ce "C++"? Peut-être "Javascript" serait un meilleur ajustement ... En ce qui concerne la question réelle, désolé, je n'ai aucune idée :( –
Je ai marqué comme C++, parce que c'est un plugin C++, et j'espère que les réponses seraient orientées vers C++ –