2010-11-21 3 views
0

ist ein Ausschnitt von dem, was ich versuche im Moment zu tun:Ist es möglich, die auf ein DOM in node.js angewendeten CSS-Stylesheets zu laden? Diese

var sys  = require("sys"), 
    request = require("request"), 
    $  = require("jquery"), 
    uri  = 'http://' + process.argv[2]; 

request({uri:uri}, function (error, response, context) { 
    if (!error && response.statusCode == 200) { 
    console.log($('body', context).css('background')); 
    } 
}) 

Offensichtlich ist dies nur undefined zurück; Gibt es eine Möglichkeit, die in den Link-Elementen definierten Stylesheets anzuwenden, so dass ich sie mit jQuery abfragen kann?

+0

Also wollen Sie etwas den Inhalt dieser URI zu analysieren und ein DOM zu erzeugen, und auch analysieren und interpretieren die CSS, alle in serverseitigen node.js ... klingt wie Sie irgendwie mit WebKit integrieren müssen, weil was Sie brauchen einen Browser. – Pointy

+0

Nun, ich habe das DOM bereits interpretiert, daher kann ich Elemente auswählen und ihre relativen Attribute und Werte abrufen - ich kann einfach kein anderes Styling als Inline-Styles bekommen. – Steve

Antwort

3

Wie Point schon wies hinaus (scnr) ist dies keineswegs trivial.

Sie müssen:

  1. Analysieren Sie die CSS
  2. die Regeln gelten für die DOM
  3. Berechnen Sie die aktuellen Stil auf der Grundlage der Regeln

Grundsätzlich benötigen Sie einen Browser-Rendering-Engine ohne die eigentliche Zeichnung, das dauert viel Code in JavaScript (50k LOC + wenn man Glück hat), müssen Sie alle CSS-Versionen, che implementieren ck den Dokumententyp usw.

Im Moment ist das Beste, was man tun kann, ist, dieses Zeug aus WebKit zu holen und es mit V8 für eine Node C-Erweiterung zu verbinden. Eine ziemlich große Arbeit, also wenn du nicht bereit bist, das alleine zu beginnen, hast du kein Glück.

Das Binden der Dinge wird einige Anstrengungen erfordern, aber es wird immer noch weniger Zeit brauchen, als das ganze Ding in JS von Grund auf neu zu schreiben (was schrecklich langsam sein wird, sogar mit der aktuellen Zunahme der JavaScript-Leistung).

+0

Gut genug, wie du gesagt hast Ich denke, ich bin Pech - was ich versuche zu tun ist weit außerhalb des Geltungsbereichs mit diesem in Betracht gezogen. Danke nochmal Ivo! – Steve

+0

FAO wer sonst diese Funktionalität wünscht, obwohl es nicht das selbe ist, entschied ich mich dafür, ein Stylesheet zu ziehen und Regex zu verwenden, um die benötigten Bits herauszuziehen. CSS ist ziemlich einfach zu prognostizieren, so dass ich die Daten, die ich brauche, mit einer angemessenen Genauigkeit erhalten kann. Codebeispiel unter: http://logo.stevelace.net – Steve

0

Obwohl nicht Node.js, scheint dies jetzt über PhantomJS möglich zu sein.

Verwandte Themen