为什么node.js不具有本地DOM?

当我发现NodeJS是build立在V8 Javascript引擎上的时候,我认为“好的,网页抓取将会更容易,因为页面将会像浏览器一样呈现,其中支持XPath的”原生“DOM以及页面中的任何AJAX调用执行“。

  1. 为什么当它使用与Chrome相同的JS引擎时,它不具有本地DOM?
  2. 同样,为什么它没有在检索页面中运行JS的模式?
  3. 我不理解JavaScript引擎与Web浏览器中的引擎? 🙂

非常感谢!

DOM是DOM,JavaScript实现是一个单独的实体。 DOM表示Web浏览器公开给JavaScript环境的一组工具。 然而,没有任何要求 ,任何特定的JavaScript运行时都将有通过全局对象公开的任何设施。

什么Node.js是一个完全独立于Web浏览器的独立 JavaScript环境。 Web浏览器和JavaScript之间没有内在联系; DOM 不是 JavaScript语言或规范或任何东西的一部分。

我在基于Java的Web服务器中使用旧的基于Rhino Java的JavaScript实现。 这个环境与任何DOM都没有任何关系。 这是我自己的应用程序负责填充全局对象的设施来做我所需要的,而不是一个DOM。

请注意,如果您需要在Node项目中使用虚拟DOM,则有像jsdom这样的项目。 由于其作为服务器端平台的本质,DOM是Node所不具备的function,对于各种服务器应用程序来说,它仍然非常有用。 这并不是说一个DOM对某些人可能没有什么用处,但是它只是与过程控制,I / O,networking,数据库互操作等不在同一类服务中。

“为什么?”这个问题可能会有一些“官方”的答案。 在那里,但它基本上只是那些维护Node(Node基础)的业务。 如果有一些无畏的开发者决定Node应该默认提供一组模块来支持一个虚拟的DOM,并且成功的工作和实现,Node 就会有一个DOM。

PS:在阅读这个问题的时候,我还想知道如果V8 (node.js是build立在这个之上的)有一个DOM

为什么当它使用与Chrome相同的JS引擎时,它不具有本地DOM?

但是我search谷歌,发现谷歌的V8页面 ,其中叙述了以下内容:

JavaScript最常用于浏览器中的客户端脚本,例如用于操作文档对象模型(DOM)对象。 但是,DOM通常不是由JavaScript引擎提供的,而是由浏览器提供的。 V8也是如此 – Google Chrome提供了DOM。 不过,V8提供了ECMA标准中规定的所有数据types,操作符,对象和函数。

node.js使用V8而不是Google Chrome

同样,为什么它没有在检索页面中运行JS的模式?

我也认为我们并不需要那么糟糕。 Ryan Dahl创buildnode.js作为一个人(单个程序员)。 也许现在他(他的团队)会开发这个,但是我已经非常惊讶于他产生的代码量(疯狂)。 他想做一个不封闭的简单/高效的图书馆,我觉得他做得很好。

但是,另一位开发人员又创build了一个模块,这个模块在https://github.com/tmpvar/jsdom是非常好的,并且正在积极开发(今天)。

我不理解JavaScript引擎与Web浏览器中的引擎? 🙂

这是不同的东西,希望从上面的报价清楚。

你似乎有一个有缺陷的假设,即V8和DOM是密不可分的,事实并非如此。 DOM实际上是由Webkit处理的,V8不处理DOM,它处理对DOM的Javascript调用。 不要让这些让你灰心,Node.js已经在实时服务器市场上占据了一席之地,但是别让任何人告诉你这只是服务器。 节点使得用JavaScript构build几乎任何东西成为可能。

有可能做你正在谈论的事情。 例如,如果你真的需要访问DOM和node-htmlparser ,就有非常好的jsdom库,也有一些非常好的抓取库,像杏一样利用这些库。

node.jsselect不将其包含在标准库中。 对于任何function而言,综合性,可扩展性和可维护性之间存在不可避免的折衷。

这并不意味着它不是有用的。 至less有一个旨在用于NodeJS的JavaScript DOM实现(以及其他CommonJS实现)。

这是相关的:有一个新的项目(2012)称为node-webkit ,它试图从Webkit添加DOM和更多的节点。 支持它!

为了回答你的基本问题,你可以使用JSDom和jQuery在node.js中删除页面: http : //blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs

我自己用了几次这个方法,效果很好。

Node.js用于服务器端编程。 没有DOM在服务器中呈现。

Javascript!=浏览器。 Javascript作为一种语言并不依赖于浏览器; node.js仅仅是用于服务器而不是浏览器的Javascript的一个实现。 因此没有DOM。

如果您将DOM读为“可立即从我的脚本访问的链接对象”,那么答案就是这样 ,但它与Web文档脚本中可用的对象集有很大不同。 主要原因是节点是'V8的I / O',而不是'V8的HTML树对象'

似乎人们已经回答了“为什么”,但不是如何。 如何在Web浏览器中快速回答文档对象(因此DOM,文档对象模型)。 在Windows上,这个对象被称为文档对象 。 你可以参考这个页面,看看它公开的用于处理HTML文档(如createElement 。 我不使用node.js,或者在一段时间内没有完成COM编程,但是我想通过调用COM对象IHTMLDocument3可以在node.js中使用DOM。 当然对于Mac OS X或Linux等其他平台,您可能需要使用OS api中的某些东西。 这应该允许您使用DOM轻松构build网页服务器端,或者抓取传入的网页。

1)它有什么意思,它有一个议题o对象模型 ? 没有文件可以代表

2)你大部分时间不检索页面。 你可以,但大多数节点应用程序可能不会。

3)没有文档和浏览器,Javascript只是另一种编程语言。 所以你可能会问为什么在C#或Java中没有DOM