我正在编写一个脚本来获取所有想要访问窗口对象的任意JavaScript文件。因此,我想欺骗窗口对象,以获得我需要的结果。
// arbitrary.js
var foo = window.bar;
-> Error: window undefined.
因此,我想将一个窗口对象注入模块的本地范围。假装我没有对arbitrary.js进行编辑访问
// server.js
global.window = {...};
require('./arbitrary");
这不起作用,因为arbitrary.js专门尝试访问" window"而不是" global.window"所以如果我把对象放在全局对象上并不重要。我似乎无法将对象注入任意对象。范围。
有谁知道如何实现这一目标?也许我应该使用" require"获取任意.js代码在包含它的范围内运行?我虽然没有找到任何办法。我应该以某种方式使用eval()吗?
答案 0 :(得分:0)
您提供的代码实际上是有效的,至少在Node.js 6.2.0上。
arbitrary.js
:
var foo = window.bar
server.js
:
global.window = {foo: "foo"}
require("./arbitrary.js")
正在运行node server.js
不会出现任何错误。
答案 1 :(得分:-1)
您可以使用工厂模式。
global.window = {hi: "hello world"};
var arb = require('./arbitrary')(global.window);
arb.myFunc();
在你的arbitrary.js中:
module.exports = function(window){
var foo = window.bar;
function myFunc () { console.log(window.hi);}
return {
myFunc: myFunc
}
}