2012-04-25 15 views
7

Actualmente estoy trabajando en un proyecto que requiere que los estilos calculados se envíen al navegador a través de JSDOM. Actualmente estoy buscando una forma de inyectar algunos CSS básicos en JSDOM para que pueda computarizar el estilo correcto en línea (sí, sé que eso es malo).¿Cómo ad ews stylesheets a JSDOM

Por lo que he descubierto que puedo utilizar JSDOM Nivel 2, pero a partir de ahí no puedo encontrar ninguna documentación sobre cómo inyectar los estilos Esto es lo que tengo hasta ahora

var document = jsdom.jsdom('<!DOCTYPE html><html><head></head><body id="abody" ></body></html>', jsdom.level(2, 'style'), { 
     features : { 
      FetchExternalResources : ['script', 'css'], 
      QuerySelector : true 
     } 
    }); 

tengo ha estado insertando el css en la etiqueta principal, pero fue en vano. Y sé que podría estar haciendo mal el código anterior también.

Cualquier ayuda sería genial.

+0

¿Has visto esto ** https: //github.com/yonran/jsdom/blob/style/lib/jsdom/level2/style.js** –

+0

Lo he visto pero no he podido encontrar la manera de llama esas funciones. – Paul

Respuesta

11

Bueno, esto va a suena un poco tonto, pero esto es lo que hice:

var path = require('path'); 
    var fs = require('fs'); 
    var mainCss = fs.readFileSync(path.normalize(__dirname + "web_main.css"), 'utf8'); 
    var document = jsdom.jsdom('<!DOCTYPE html><html><meta http-equiv="content-type" content="text/html; charset=utf-8"><head></head><body id="abody" ></body></html>', jsdom.level(3, 'index'), { 
     features : { 
      FetchExternalResources : ['script', 'css'], 
      QuerySelector : true 
     } 
    });  
    var window = document.createWindow(); 
    var head = document.getElementsByTagName('head')[0]; 
    style = document.createElement("style"); 
    style.type = 'text/css'; 
    style.innerHTML = mainCss; 
    head.appendChild(style); 

Así que, básicamente, todo lo que cambió fue moviendo el nivel de 3 índice, y en vez de directamente tenerlo en la puesta en html , Lo agregué después.

Es bastante simple y espero que ayude a alguien más.