【问题标题】:Calling an anonymous function within another function without calling the parent function在另一个函数中调用匿名函数而不调用父函数
【发布时间】:2020-02-04 21:29:13
【问题描述】:

我试图在另一个函数中调用匿名函数,但没有调用父函数。因为调用父函数会报错。

父函数:

function onloadCallback() {
  grecaptcha.render("recaptchaHolder", {
    "size": "invisible",
    "sitekey": "1Lcsvh53yhsd5312hhsg554dfhs098bbeyi_Hv",
    "callback": function(resp) {
      $("zendesk-ticketing-form").attr("grecaptcha", resp)
    }
  });
}

我想这样称呼:

function(resp){$("zendesk-ticketing-form").attr("grecaptcha",resp)}

我正在使用 Java Selenium 来执行此操作..

我试过了:

 js.executeScript("onloadCallback()(\"" + responseToken + "\")");

但它会产生错误,因为它在尝试访问其中的匿名函数之前调用了 onloadCallback(父函数)。

有什么想法吗?

【问题讨论】:

  • 如果sitekey 是一个真正的密钥,那么用不真实的东西替换它。
  • 出于隐私目的?我编辑了它
  • 是的,完全正确 - Stack Overflow 问题(和答案)是公开的,因此显示一个键会带来麻烦。 :)

标签: javascript java selenium recaptcha anonymous-function


【解决方案1】:

您不能在您想要的上下文中直接调用函数,但您可以将函数提取到外部范围,然后在内部和全局范围内使用它。

假设你有这样的情况;

function a() {
  b('some-name', {
    foo: 1,
    bar: 2,
    c: function(a, b) {
      console.log('i was finally called', a, b);        
    }
  })
}

// turn it into something like

function functionForC(a, b) {
  console.log('i was finally called', a, b);        
}

function a() {
  b('some-name', {
    foo: 1,
    bar: 2,
    c: functionForC
  })
}

我建议将该函数移出函数的范围,然后在其中使用 at 作为引用,如下所示;

这样可以保留您当前的功能并且您可以轻松地直接访问functionForC()

【讨论】:

  • 问题是该函数在一个网站中..我试图使用java执行它..例如:js.executeScript("functionName()");
  • 在这种情况下是不可能的。
  • 有没有办法做匿名函数中的任何事情? {$("zendesk-ticketing-form").attr("grecaptcha",resp)}
  • 这样? js.executeScript("document.getElementByTagName('zendesk-ticketing-form').setAttribute(\"grecaptcha\", \"" + responseToken + "\");");
【解决方案2】:

刚刚执行了里面的内容:)

        js.executeScript("$(\"zendesk-ticketing-form\").attr(\"grecaptcha\",\"" + responseToken + "\")");

谢谢

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多