如何访问greasemonkey中的本地javascript var

时间:2012-04-30 19:37:12

标签: javascript variables greasemonkey local

这是一个小时我对这个问题发疯了。

有一个页面,带有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值,我该怎么办?

2 个答案:

答案 0 :(得分: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都是毫无意义的。

因此,要回答您的问题,您无法在函数外部获取局部变量的值。既然您仍然在注入代码,为什么不将所有与foo相关的代码放在fooFunction内?

答案 1 :(得分:0)

如果您要做的是在过程中保持跟踪值,我建议使用Firebug来调试此类型的脚本,只需在脚本中的任何位置放置断点,并在其停止时它将为您提供所有正在使用的变量的当前值。