Question

J'utilise Builder Beta (Firefox) et j'essaie de faire quelque chose comme ceci:

(Il y a 3 sections dans Addon Builder: Lib, Data, Libraries)

  1. Obtenez un fichier "Def.htm" à partir de la section de données et ouvrez-les dans un nouvel onglet je le fais avec ceci:

    var tabs = require("tabs");
    var data = require("self").data;
    tabs.open(data.url('def.htm'));
    
  2. Obtenez la définition JSON de "Def.htm" Def.htm ressemble à ceci:

    <html><head>
    <title>Def title</title>
    </head><body>
    <script type="text/javascript">
        this.definition = {
            aaa: 1000,
            bbb: {
                ccc: {
                    ddd: "eee",
                    ...
                    ...
       };
    </script>
    </body></html>
    
  3. Appelez la fonction JS et passez la définition:

Il fonctionne avec l'extension Jetpack (sur Firefox 3.5), voici le code:

jetpack.tabs.onReady(function() {
    var window = this.contentWindow.wrappedJSObject;
    var def = window.definition;

    dowork (def); 
});

J'ai besoin des mêmes fonctionnalités sur le SDK complémentaire.

Était-ce utile?

La solution

C'est une approche assez étrange, pourquoi essayez-vous d'obtenir des données JSON d'une manière si compliquée? Que diriez-vous de le mettre dans un fichier data/definition.json (correctement encodé alors):

{
    "aaa": 1000,
    "bbb": {
        "ccc": {
            "ddd": "eee",
            ...
            ...
};

Et le lire en utilisant le request forfait:

var Request = require("request").Request;
var data = require("self").data;
Request({
  url: data.url("definitions.json"),
  onComplete: function(response)
  {
    dowork(response.json);
  }
});

Mais si vous souhaitez vraiment accéder aux données dans un onglet - le SDK complémentaire n'autorise pas l'accès direct aux pages de contenu à partir de votre extension. Vous pouvez utiliser le page-mod forfait Pour injecter un script de contenu dans cette page qui renverra ensuite les données à l'extension. Quelque chose dans ce sens:

var PageMod = require("page-mod").PageMod;
PageMod({
  include: data.url("def.htm"),
  contentScriptWhen: 'end',
  contentScript: 'self.postMessage(definition)',
  onAttach: function onAttach(worker)
  {
    worker.on("message", function(data)
    {
      dowork(data);
    });
  }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top