2010-11-21 49 views
0

這就是我想要的那一刻做一個片段:是否可以加載應用於node.js中DOM的CSS樣式表?

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

顯然,這只是返回undefined;有沒有辦法應用鏈接元素中定義的樣式表,以便我可以用jQuery查詢它們?

+0

因此,你想要解析該URI的內容並生成一個DOM,並解析和解釋CSS,所有在服務器端node.js ...聽起來像你需要以某種方式與WebKit集成,因爲什麼你需要的是一個瀏覽器。 – Pointy 2010-11-21 14:14:03

+0

嗯,我已經解釋了DOM,因此我可以選擇元素並獲取它們的相關屬性和值 - 除了內聯樣式,我無法獲得任何樣式。 – Steve 2010-11-21 14:19:23

回答

3

由於Pointy已經指出 out(scnr)這絕不是微不足道的。

您需要:

  1. 解析CSS
  2. 應用規則到DOM
  3. 計算基於現有規則中的風格

基本上你需要一個瀏覽器渲染引擎如果沒有實際的繪圖,那麼將需要很多的JavaScript代碼(如果幸運的話,50k LOC +),你需要實現所有的CSS版本,che ck文檔類型等

現在,人們可以做的最好的事情就是從WebKit中抓取那些東西,並將其與V8綁定以獲得Node C擴展。一份相當大的工作,所以除非你願意獨自開始這個工作,否則我想你倒黴了。如果綁定這些東西需要付出很大的努力,但是從頭開始在JS中編寫整個東西(即使目前JavaScript性能有所提高,速度會非常慢),仍然會花費更少的時間。

+0

夠公平的,正如你所說我認爲我不幸運 - 我試圖做的是推動出於範圍考慮這一點。再次感謝伊沃! – Steve 2010-11-21 15:46:15

+0

聯合國糧農組織其他任何想要這個功能的人,雖然它不是相同的,但我最終選擇了拉取樣式表,並使用正則表達式來提取我需要的位。 CSS很容易預測,所以我可以以足夠的準確度獲得所需的數據。代碼示例:http://logo.stevelacey.net – Steve 2010-11-24 21:47:38

0

雖然不是Node.js,但現在可以通過PhantomJS來實現。

相關問題