Composant Firefox XPCOM - Autorisation refusée d'appeler la méthode UnnamedClass

StackOverflow https://stackoverflow.com/questions/127693

  •  02-07-2019
  •  | 
  •  

Question

Un composant XPCOM firefox peut-il lire et écrire le contenu d’une page sur plusieurs pages?

Scénario: Un tas de fichiers HTML et javascript locaux. A & Main; Main.html " Le fichier ouvre une fenêtre "pluginWindow" et crée un plugin avec:

netscape.security.PrivilegeManager.enablePrivilege ('UniversalXPConnect');
var obj = Components.classes [cid] .createInstance ();
plugin = obj.QueryInterface (Components.interfaces.IPlugin);
plugin.addObserver (handleEvent);

Le plugin qui a 3 méthodes.

IPlugin.Read - Lire les données du plugin
IPlugin.Write - Écrire des données dans le plugin
IPlugin.addObserver - Ajoute un gestionnaire de rappel pour la lecture.

Le " Main.html " appelle ensuite le pluginWindow et essaie d’appeler la méthode du plugin Write.

Je reçois une erreur:

L'autorisation d'appeler la méthode UnnamedClass.Write

est refusée
Était-ce utile?

La solution

Tout d’abord, votre code C ++ est-il vraiment un plug-in ou un composant XPCOM , éventuellement installé dans le cadre d'un élément extension ? On dirait que c'est le plus tard.

Si tel est le cas, il ne peut pas être utilisé avec du code JS non approuvé - aucune page Web ou un fichier HTML local. Il est entièrement utilisable à partir de code privilégié, dont le type le plus courant est le code .

Vous travaillez sur ce problème lors de la création du composant à l'aide de l'appel enablePrivilege ('UniversalXPConnect') . Ceci n'est pas vraiment recommandé, à moins que cela ne soit pas distribué aux utilisateurs (étant donné que cet appel ouvre une boîte déroutante et que vous définissez une préférence pour toujours autoriser les scripts file: // à utiliser XPCOM, il peut s'agir d'un problème de sécurité, car tous les pages sont fiables - pensez aux pages Web enregistrées).

Votre appel Write échoue pour la même raison - les pages fichier: // ne sont pas fiables pour l'utilisation de composants XPCOM. Vous pouvez probablement le faire fonctionner si vous ajoutez un autre appel enablePrivilege dans la même fonction que l'appel en écriture lui-même.

En fonction de la situation, la solution pourrait être meilleure.

Si vos fichiers doivent être traités comme des fichiers de confiance, vous pouvez les regrouper comme une extension et y accéder via une URL chrome: //. Cela donne au code dans ces pages les autorisations pour 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 code mozilla pour un exemple, ainsi que pour nsISecurityCheckedComponent ).

Oh, et si vous n’obtenez pas de bonnes réponses ici, vous devriez absolument essayer les groupes de discussion / listes de diffusion Mozilla.

[modifier en réponse à un commentaire] Envisagez de placer le code nécessaire à l'appel du composant dans un script chrome: //. Sinon, vous devriez pouvoir "bénir" vos pages avec les privilèges chrome en utilisant un code tel que this (notez que cela fait le contraire de ce dont vous avez besoin - en supprimant les privilèges de chrome).

Autres conseils

Main.html et cette autre fenêtre fonctionnent-ils avec des privilèges chrome? Si vous accédez à Main.html "normalement", en le mettant simplement dans la barre d’emplacement de Firefox, il aura des restrictions sur ce qu’il peut faire (sinon, une page Web arbitraire pourrait faire exactement de même).

Si vous créez un plug-in firefox, placez votre code dans une incrustation XUL.

Si vous voulez vraiment permettre à une page Web de faire ce que votre plugin fait, vous pouvez établir un mécanisme par lequel la page peut demander au plugin de faire l'opération avec ses privilèges chrome et d'envoyer le résultat à la page par la suite. .

Si vous ne faites PAS une extension firefox ... alors je crains d'avoir mal compris quelque chose, pourriez-vous l'expliquer davantage?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top