我正在使用nightmare
评估来拦截XHR响应。我当前将响应存储在window
对象中。缺点是导航或页面重新加载后,存储的响应将被截断。
我想将它们存储在全局数组变量中,但是,噩梦evaluate
方法在某些不同的Javascript上下文上运行,即使我可以在访问渲染器进程进行调试时访问变量并推送响应,它说该变量为空。
我当前的代码:
Nightmare.evaluate(() => {
window.XMLHttpRequest.prototype.open = function (method: string, url: string, async: any, user: string, pass: string) {
this.addEventListener("readystatechange", () => {
if (this.readyState === 4) { // State complete...
window.__responses.push({
responseText: this.responseText,
readyState: this.readyState,
url: url,
method: method
});
}
}, false);
};
window.XMLHttpRequest.prototype.open.apply(this, arguments);
})
问题:
如何正确地将响应存储到全局变量中,以便在重新加载页面或导航时不会被截断?