这是一个小时我对这个问题发疯了。
有一个页面,带有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值,我该怎么办?
答案 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来调试此类型的脚本,只需在脚本中的任何位置放置断点,并在其停止时它将为您提供所有正在使用的变量的当前值。