【发布时间】:2012-12-21 06:33:44
【问题描述】:
我正在评估 Ruby 中的脚本,我希望每个脚本都有自己的沙箱,其中包含一个名为 $window 的全局变量。 $window 变量应该指向不同的东西,具体取决于脚本在哪个沙箱中运行。线程局部变量可以工作,但我没有使用线程。我正在使用 Ruby C API,因此有点打开了可能性。
现在,我在 Binding 中运行每个脚本,所以它们在那里有些沙盒。绑定可以有封闭的局部变量,但不能有全局变量。想法是这样的:
sandbox1 = window1.get_binding
sandbox2 = window2.get_binding
sandbox3 = window3.get_binding
sandbox1.eval('$window.foo') # calls 'foo' on window 1
sandbox2.eval('$window.foo') # calls 'foo' on window 2
sandbox3.eval('$window.foo') # calls 'foo' on window 3
有没有办法关闭Binding 中的全局变量?我找到了一个可能的解决方案并将其发布在下面。
【问题讨论】:
-
好像是在担心多个线程的访问同步到一个全局?
-
它们不在单独的线程中,尽管这样会很容易!它们是网络浏览器中的不同窗口。
-
您要实现的基本目标是什么?全局变量通常被认为是一种不好的做法。
-
我澄清了我的问题。我想拥有多个具有相同名称的全局变量的沙箱。
-
为什么这被标记为
javascript和webkit?