返回结果后,Jsdom在外部资源脚本(页面上的脚本)上抛出错误

时间:2013-12-29 18:07:19

标签: javascript jquery node.js jsdom cheerio

我收到的错误似乎源于其中一个页面脚本。

file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1
return c.apply(undefined,a)}catch(d){webengage.eLog(d);if(!b){throw d}}}else{t
                                                                    ^
TypeError: Cannot call method 'call' of undefined
    at new exports.NOT_IMPLEMENTED (/usr/local/lib/node_modules/jsdom/lib/jsdom/browser/utils.js:9:13)
    at Object.webengage.eLog (file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:366)
    at t.extend.u (file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:19160)
    at Object.t.extend.error (file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:19299)
    at file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:66518
    at Object.webengage.withELog (file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:640)
    at Timer.<anonymous> (file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1:937)
    at Timer.exports.setInterval.timer.ontimeout (timers.js:234:14)

我从以下代码中收到此错误:

try {
  var document = jsdom.jsdom(str, null, {});  
} catch(e) {
  console.log("Got ERROR...");
  console.log(e);
}
console.log("Page Document Loaded.");
var window = document.parentWindow;
//console.log(window.document.innerHTML);
console.log(window.innerWidth);
console.log(typeof window.document.getElementsByClassName);

这里str是我之前获得的html。我能够看到打印结果,html是innerWidth和typeof getElementsByClassName,即函数。但大约20秒后,我收到上述错误,我的应用程序崩溃,而不从上面打印Got ERROR...

我遇到的第一个问题是为什么我的应用程序在打印完最后一件事后仍然在运行。对于jsdom而言,这是一个正常的行为吗,它继续像浏览器一样在脚本继续运行之前一直运行,直到给出window.close()。

实际问题是,我该如何解决这个问题。我想在这个窗口对象中触发几个事件并与之交互,但它会继续崩溃。

脚本的网址有点令人困惑: file://cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1

这是因为页面在使用url的ajax调用中获取此脚本资源: //cdn.widgets.webengage.com/js/widget/webengage-min-v-3.0.js:1

虽然jsdom能够获取资源,但我检查了这个脚本是否显示错误。

0 个答案:

没有答案