Node.js window.addEventListener不适用于空窗口

Node.js window.addEventListener不适用于空窗口,node.js,jsdom,Node.js,Jsdom,JSDOM版本:0.6.5 Nitrous.io云IDE环境 观察到的问题: 创建空窗口然后附加事件处理程序失败,出现异常跟踪: TypeError: Cannot read property 'Node' of undefined at Object.DOMWindow.addEventListener (/home/action/workspace/Projects/nodejs/node_modules/jsdom/lib/jsdom/browser/index.js:180:10)

JSDOM版本:0.6.5 Nitrous.io云IDE环境

观察到的问题: 创建空窗口然后附加事件处理程序失败,出现异常跟踪:

TypeError: Cannot read property 'Node' of undefined

at Object.DOMWindow.addEventListener (/home/action/workspace/Projects/nodejs/node_modules/jsdom/lib/jsdom/browser/index.js:180:10)

at Request._callback (/home/action/workspace/Projects/nodejs/page_test_demo.js:22:14)

at Request.self.callback (/home/action/workspace/Projects/nodejs/node_modules/request/index.js:148:22)

at Request.EventEmitter.emit (events.js:98:17)

at Request. (/home/action/workspace/Projects/nodejs/node_modules/request/index.js:886:14)

at Request.EventEmitter.emit (events.js:117:20)

at IncomingMessage. (/home/action/workspace/Projects/nodejs/node_modules/request/index.js:837:12)

at IncomingMessage.EventEmitter.emit (events.js:117:20)

at _stream_readable.js:910:16

at process._tickCallback (node.js:415:13)
下面是有问题的代码片段:

var window = jsdom.createWindow();
console.log(window);

window.addEventListener('load', function() {
console.log('Load event completed');
});

window.document = jsdom.jsdom(body);

有人能告诉我这里遗漏了什么吗?

您在评论中提到的问题在7个月前已经解决,因此只要您有最新版本的JSDOM,您就应该能够做到这一点:

var jsdom = require('jsdom');
var body = '<html><body></body></html>';

var document = jsdom.jsdom(body);
var window = document.createWindow();
window.addEventListener('load', function() {
    console.log('Load event completed');
});

以后你能把它捆起来吗?我想象“load”将在jsdom.jsdombody之后异步启动。@loganfsmyth谢谢您的提示。事实上,即使我尝试在jsdom.jsdombody之后绑定它,它也不会加载。请参考下面讨论类似问题的链接:。在阅读并尝试了很多内容之后-我认为您是正确的。然而,我想指出的是,当我们在现实生活中进行抓取时,上述方法并不一定适用于某些网站。作为实验的一部分,我使用“请求”模块并在jsdom中加载html响应。“加载”事件处理程序在“www.yahoo.com”等网站上运行良好,但在“www.google.com”上无法运行。对于“www.google.com”,不会触发“加载”事件,我的脚本将永远等待。你知道为什么会这样吗?