Pregunta

Estoy usando Add-on Builder Beta (Firefox) y estoy intentando hacer algo como esto:

(Hay 3 secciones en Addon Builder: Lib, Datos, Bibliotecas)

  1. Obtenga el archivo "def.htm" de la sección de datos y ábralo en una nueva pestaña Lo hago con esto:

    var tabs = require("tabs");
    var data = require("self").data;
    tabs.open(data.url('def.htm'));
    
  2. Obtenga la definición JSON de "def.htm" def.htm se ve así:

    <html><head>
    <title>Def title</title>
    </head><body>
    <script type="text/javascript">
        this.definition = {
            aaa: 1000,
            bbb: {
                ccc: {
                    ddd: "eee",
                    ...
                    ...
       };
    </script>
    </body></html>
    
  3. Llame a la función JS y pásele la definición:

Funciona con la extensión Jetpack (en Firefox 3.5), aquí está el código:

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

    dowork (def); 
});

Necesito la misma funcionalidad en Add-on SDK.

¿Fue útil?

Solución

Ese es un enfoque bastante extraño, ¿por qué está tratando de obtener datos JSON de una manera tan complicada?¿Qué tal ponerlo en un archivo data/definition.json (codificado correctamente entonces):

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

Y leerlo usando el paquete request :

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

Pero si realmente desea acceder a los datos en una pestaña, el SDK complementario no permite el acceso directo a las páginas de contenido desde su extensión.Puede utilizar paquete page-mod para inyectar un script de contenido en esta página que luego enviará los datos de vuelta a la extensión.Algo parecido a esto:

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);
    });
  }
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top