Вызов анонимной функции в другой функции без вызова родительской функции. - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь вызвать анонимную функцию внутри другой функции, но без вызова родительской функции. Потому что вызов родительской функции приведет к ошибкам.

Родительская функция:

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 (родительская функция) перед попыткой доступа к анонимной функции, которая находится внутри.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Только что выполнил то, что было внутри:)

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

Спасибо

0 голосов
/ 05 февраля 2020

Вы не можете напрямую вызывать функцию в нужном вам контексте, но вы можете извлечь функцию из внешней области, а затем использовать ее как внутри, так и глобально.

Предполагая, что у вас есть ситуация, подобная;

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
  })
}

Я бы предложил вывести эту функцию из области действия функции, а затем использовать в качестве ссылки внутри нее, как показано ниже;

Таким образом, ваш текущая функциональность сохраняется, и вы можете легко получить доступ к functionForC() напрямую

...