2012-04-25 8 views
7

Ich arbeite gerade an einem Projekt, bei dem ich berechnete Styles über JSDOM an den Browser senden muss. Ich bin derzeit auf der Suche nach einer Möglichkeit, einige grundlegende CSS in JSDOM zu injizieren, so dass es den richtigen Inline-Stil Computer (Ja, ich weiß, das ist schlecht).Wie schreibt man Stylesheets nach JSDOM?

Von dem, was ich habe ich JSDOM fand heraus, Ebene 2 verwenden können, aber von dort aus kann ich keine Dokumentation finden, wie die Stile zu injizieren Dies ist, was ich bisher

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

Ich habe habe das css in das head-tag eingefügt, aber ohne erfolg. Und ich weiß, dass ich den obigen Code falsch machen könnte.

Jede Hilfe wäre großartig.

+0

Hast du das gesehen? Https://github.com/yonran/jsdom/blob/style/lib/jsdom/level2/style.js** –

+0

Ich habe es gesehen, aber ich konnte keinen Weg finden ruf diese Funktionen an. – Paul

Antwort

11

Nun, dies geht klingt ein bisschen dumm, aber das ist, was ich tue:

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); 

Also im Grunde alles, was ich geändert wurde um das Niveau zu 3 Index bewegt, und statt direkt in dem Start mit html Ich habe es später angehängt.

Es ist ziemlich einfach und ich hoffe, es hilft jemand anderen aus.