【问题标题】:Is it possible to load the CSS stylesheets applied to a DOM in node.js?是否可以在 node.js 中加载应用于 DOM 的 CSS 样式表?
【发布时间】:2011-05-13 09:36:06
【问题描述】:

这是我目前正在尝试做的事情:

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 查询它们?

【问题讨论】:

  • 所以你想要一些东西来解析那个 URI 的内容并生成一个 DOM,并解析和解释 CSS,所有这些都在服务器端 node.js 中......听起来你需要与WebKit 不知何故,因为你需要的是一个浏览器。
  • 好吧,我已经解释了 DOM,因此我可以选择元素并获取它们的相关属性和值 - 除了内联样式之外,我无法获得任何样式。

标签: jquery node.js


【解决方案1】:

虽然不是 Node.js,但现在看来可以通过 PhantomJS 实现。

【讨论】:

    【解决方案2】:

    Pointy 已经指出 (scnr) 这绝不是微不足道的。

    你需要:

    1. 解析 CSS
    2. 将规则应用于 DOM
    3. 根据规则计算当前样式

    基本上你需要一个没有实际绘图的浏览器渲染引擎,这将需要 大量 JavaScript 代码(如果幸运的话,50k LOC+),你需要实现所有的 CSS 版本,检查文件类型等

    现在最好的办法是从 WebKit 中获取这些东西,并将其与 V8 绑定以用于 Node C 扩展。一项非常艰巨的工作,所以除非你愿意自己开始,否则我猜你不走运。

    绑定这些东西需要相当多的努力,但与从头开始用 JS 编写整个东西相比,它所花费的时间仍然要少得多(这将非常缓慢,即使当前 JavaScript 性能有所提高)。

    【讨论】:

    • 很公平,正如你所说,我认为我不走运 - 考虑到这一点,我想做的事情超出了范围。再次感谢伊沃!
    • FAO 其他任何需要此功能的人,虽然它绝不相同,但我最终选择拉一个样式表并使用正则表达式来提取我需要的位。 CSS 相当容易预测,因此我可以以足够的准确度获得所需的数据。代码示例位于:logo.stevelacey.net
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2022-10-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多