繁体   English   中英

如何在润滑脂猴子中访问本地javascript var

[英]how to access a local javascript var in greasemonkey

这个问题使我发疯了已经一个小时了。

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

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

我已经用油腻的猴子脚本替换了这个功能:

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

这可行。

现在,我必须在我的润滑脂脚本中访问foo值,该怎么办?

为什么要在数组内创建JavaScript函数? 我假设foofunction是一个全局函数,为什么不只在window内创建一个函数(对于Greasemonkey,我认为是unsafeWindow )?

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呢?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM