Javascript 如何在Greasemonkey中将变量传递给事件侦听器?

Javascript 如何在Greasemonkey中将变量传递给事件侦听器?,javascript,greasemonkey,Javascript,Greasemonkey,我为Firefox编写了一个Greasemonkey脚本,它为当前.NET文档网页上的每个方法添加了返回类型和参数名称。例如,在描述类的网页上,Add(T)将更改为bool Add(T项)signature等。脚本正确下载所有方法的签名-请参阅console.log。我还可以通过取消注释node.textContent=“*changed*”来更改每行中Name列的内容。不幸的是,如果我想将Name列的内容设置为适当的签名,这只适用于第一行。节点变量似乎没有正确地传递给for循环中的事件侦听器

我为Firefox编写了一个Greasemonkey脚本,它为当前.NET文档网页上的每个方法添加了返回类型和参数名称。例如,在描述类的网页上,
Add(T)
将更改为
bool Add(T项)
signature等。脚本正确下载所有方法的签名-请参阅
console.log
。我还可以通过取消注释
node.textContent=“*changed*”
来更改每行中Name列的内容。不幸的是,如果我想将Name列的内容设置为适当的签名,这只适用于第一行。节点变量似乎没有正确地传递给for循环中的事件侦听器

以下是完整的脚本代码:

// ==UserScript==
// @name     Unnamed Script 785375
// @include  https://msdn.microsoft.com/en-us/*
// @version  1
// @grant    none
// ==/UserScript==

//get all links in Name column of Constructors, Properties and Methods tables
var nodes = document.evaluate("//table[@id='idConstructors' or @id='idProperties' or @id='idMethods']/tbody/tr/td[@data-th='Name']/a",
                              document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

//update text of each link to contain the full signature of the class member
for (var i = nodes.snapshotLength - 1; i >= 0; i--) {
  var node = nodes.snapshotItem(i);
  //node.textContent = "*changed*";

  //the signature is found in the first pre tag on the webpage pointed by the current link
  var oReq = new XMLHttpRequest();
  oReq.addEventListener("load", function() {
    var html = document.createElement('html');
    html.innerHTML = this.responseText;
    var elements = html.getElementsByTagName('pre');
    var s = elements[0].textContent;
    s = s.replace(/\n/g, "");   //remove unnecessary white space from the signature
    s = s.replace(/\t/g, " ");
    s = s.replace(/\( /g, "(");
    console.log(s);
    node.textContent = s;
  });
  oReq.open("GET", node.getAttribute("href"));
  oReq.send();
}
目前的错误结果是:


循环中的JavaScript闭包是一个常见问题。 更改:

var node = nodes.snapshotItem(i);
致:

会有帮助的

const node = nodes.snapshotItem(i);