允许所需模块访问本地范围

时间:2016-05-20 23:35:25

标签: javascript node.js scope

我正在编写一个脚本来获取所有想要访问窗口对象的任意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()吗?

2 个答案:

答案 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
    }
}