4
function Foo1() {
    var bar = 'test';
}

AFAIK,不可能从全局范围访问变量 bar ,除非编写一个特权函数来这样做,例如

function Foo2() {
    var bar = 'test';
    this.read = function(){return bar;};
}

Greasemonkey(或任何其他工具)是否提供任何访问变量 bar 的方法,而不是用 Foo2 重新定义整个函数 Foo1?Greasemonkey 有 GM_xmlhttprequest 回避某些限制,所以我想知道它是否也可以这样做并为我节省一些问题。

我目前要做的是读取和写入嵌入在函数中的私有变量,该函数本身也位于单独的 .js 包含中。因此,我无法直接修改脚本,我必须使用 AJAX 加载 .js,进行修改,然后覆盖原始脚本。这非常麻烦,我想要一种更简单的方法来完成这项任务。

4

2 回答 2

2

GM_xmlhttprequest 只是绕过浏览器安全。另一方面,变量范围是语言和 Javascript VM 的一部分。如果不修改 Javascript VM,就无法访​​问函数范围之外的那些“私有”变量。

于 2013-06-01T19:49:02.243 回答
-1

如果Foo1不是本机函数并且您确实知道函数的模式,那么您可以使用以下方法获取变量的内容:

var bar = /bar = '(\w+)'/.test(Foo1.toString()) && RegExp.$1;
alert(bar); // will return "test"
于 2013-06-02T00:46:37.070 回答