javascript - 我如何修复 GM_xmlhttpRequest 中的这个 JS 范围

标签 javascript greasemonkey scope

当我运行此代码时,警报 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/

相关文章:

javascript - 如果已经突出显示,如何取消选择文本框中突出显示的文本?

javascript - 通过ajax重新加载JavaScript函数/重新读取jsf-bean值

google-chrome - 在 Chrome 中通过用户脚本替换页面功能?

javascript - 更改 onclick 在新窗口中打开

Intellij 无法解析 Spring bean 范围租户

javascript - 火狐扩展 : how to get a script to run from a load overlay

javascript - 是否可以在运行时使用 Node.js 中的函数生成对象?

javascript - 将innerHTML 与Greasemonkey 结合使用

javascript - JS 循环变量作用域

javascript - 在主渲染循环中访问部分 GLTF 导入(抱歉,如果菜鸟)