1

已经一个小时了,我要为这个问题发疯了。

有一个页面,带有javascript函数:

<script>
  function foofunction(foo){
      dosomething(foo);
    }
</script>

我已经用一个greasemonkey脚本替换了这个函数:

var scriptCode = new Array();

scriptCode.push('function foofunction(foo){    ');
scriptCode.push('    dosomething(foo);             ');
scriptCode.push('    myinjectedcode;               ');
scriptCode.push('}'                                 );

var script = document.createElement('script');
script.innerHTML = scriptCode.join('\n');
scriptCode.length = 0;

document.getElementsByTagName('head')[0].appendChild(script);
//here I have to access to foo value

这行得通。

现在我必须访问我的greasemonkey 脚本中的foo 值,我该怎么做?

4

2 回答 2

1

为什么要在数组中创建 JavaScript 函数?我假设foofunction是一个全局函数,你为什么不在里面创建一个函数window(或者unsafeWindow,我认为,对于 Greasemonkey)?

unsafeWindow.foofunction = function(foo){
    dosomething(foo);
    //myinjectedcode;
}

foo是一个局部变量,所以它只存在于foofunction函数内部。如果您想在此之外访问它,则需要将其设为全局变量。

unsafeWindow.foofunction = function(foo){
    dosomething(foo);
    //myinjectedcode;
    unsafeWindow.myFoo = foo;
}
unsafeWindow.myFoo; // will be set to `foo`, but only after `fooFunction` is ran

问题是,myFoo只会在fooFunction运行后设置,并且没有好方法让你等到那时。我建议制作一个“回调”功能。

unsafeWindow.foofunction = function(foo){
    dosomething(foo);
    //myinjectedcode;
    unsafeWindow.myFooCallback(foo);
}
unsafeWindow.myFooCallback(foo){
    // this will be called with `foo` after `fooFunction` is ran.
}

fooFunction但是,这有点毫无意义,因为无论如何您都将代码注入其中。

因此,要回答您的问题,您无法在函数之外获取局部变量的值。既然你无论如何都在注入代码,为什么不把所有与 inside 相关的代码都foo放在里面fooFunction呢?

于 2012-04-30T19:49:56.437 回答
0

如果您尝试做的是在我建议使用Firebug调试此类关闭脚本的过程中跟踪值,只需在脚本中您想要的任何位置放置一个断点,当它停止时它会为您提供当前值关闭所有正在使用的变量。

于 2012-04-30T19:46:37.697 回答