![](/img/trans.png)
[英]How to I access a page level (local) javascript variable in a greasemonkey script?
[英]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.