2013-07-12 27 views
0

JSDOM版本:0.6.5 Nitrous.io雲IDE環境window.addEventListener不空窗工作

問題觀察: 創建一個空的窗口,然後附加一個事件處理失敗,異常跟蹤:

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

誰能告訴我什麼,我錯過了她è?

+0

你能後綁定呢?我想'load'會在'jsdom.jsdom(body)'後異步觸發。 – loganfsmyth

+0

@loganfsmyth謝謝你的提示。事實上,即使我嘗試在jsdom.jsdom(body)之後綁定它,它也不加載。請參閱下面討論類似問題的鏈接:https://github.com/tmpvar/jsdom/issues/530。 –

回答

0

您在您的評論提到這個問題已經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'); 
}); 
+0

閱讀並嘗試了很多東西之後 - 我認爲你是對的。不過,我想指出的是,上述方法無法保證在我們進行真實生活的時候爲某些網站工作。作爲我的實驗的一部分,我使用'request'模塊並在jsdom中加載html響應。 「加載」事件處理程序適用於諸如「www.yahoo.com」之類的網站,但無法用於「www.google.com」。在「www.google.com」的情況下,「加載」事件不會被觸發,我的腳本將永遠等待。你知道爲什麼會出現這種情況嗎? –