当我运行此代码时,警报 2 显示 6 个不同的 href 链接。警报 3 显示最后一个 href 6 次。我如何让它使用与警报 2 相同的对象(linkdom 又名 thelink)。
注意:这是在greasemonkey 脚本中
{
var linkdom = thelink;
alert('2' + linkdom.getAttribute("href"));
GM_xmlhttpRequest({
method: 'GET',
url: href,
onload: function(resp){
//...
alert('3' + linkdom.getAttribute("href"));
}
});
//...
}
最佳答案
如果这是您自己的函数,我会说将其作为参数传递。或者,如果 JavaScript 有默认参数,我会说将其作为默认参数传递。不过现在就是这样……试试这个。
{
var linkdom = thelink;
alert('2' + linkdom.getAttribute("href"));
GM_xmlhttpRequest({
method: 'GET',
url: href,
onload: (function() {
var localvar = linkdom;
return function(resp){
//...
alert('3' + localvar.getAttribute("href"));
}})()
});
//...
}
这将创建一个外部函数并将局部变量设置为 linkdom
的当前值。然后它创建您的函数并返回它。然后我立即应用外部函数来恢复您的函数。外部函数不会共享相同的局部变量,因此代码应该可以工作。
关于javascript - 我如何修复 GM_xmlhttpRequest 中的这个 JS 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008327/