Как я могу вызвать функцию JavaScript, используя C # в Content Grabber? - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь вызвать функцию Javascript, используя C # в Content Grabber. (Content Grabber - это программа для просмотра веб-страниц).

Код Javascript:

$.definePage({
    idRecaptcha: null,

    init: function() {},

    carregarReCaptcha: function() {
        if(page.idRecaptcha == null) {
            var sitekey = $("#reCaptchaPublicKey").val();
            page.idRecaptcha = grecaptcha.render($("#tecRecaptcha")[0], {
                'callback' :  page.verifyCallback,
                'sitekey': sitekey
            });
        }
    },

    verifyCallback: function(response) {
        if(response) {
            $("#form").submit();
        }
    }
});

var onloadCallback = function() {
    page.carregarReCaptcha();
}

Я хочу вызвать функцию «verifyCallback». По сути, эта функция отправляет токен recaptcha, который будет проверять правильность введенного мной токена.

В моем агенте Content Grabber я хочу вызвать эту функцию, и у меня есть этот код, но он выдает мне ошибку:

using System;
using System.Web.UI;
using Sequentum.ContentGrabber.Api;
public class Script
{
    //See help for a definition of CustomScriptArguments.
    public static CustomScriptReturn CustomScript(CustomScriptArguments args)
    {
        // retrieve page from current handler
        var page = System.Web.HttpContext.Current.CurrentHandler as Page;

        if (page == null)
        {
            // do something, e.g. throw exception
            return CustomScriptReturn.Pause();
        }

        // Place your script code here.
        // Return empty for no special action.
        string response = args.DataRow["Captcha"];
        string script = "page.verifyCallback('" + response + "');";

        // call ClientScript from existing page instance
        page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);

        return CustomScriptReturn.Empty();
    }
}

Когда я компилирую, он возвращает эту ошибку:

Object reference not set to an instance of an object.

Похоже, я не могу просто удалить object sender, EventArgs e

Я не очень знаком с JS или C #, поэтому буду признателен за любую помощь, которую смогу получить. Большое вам спасибо!

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

В дополнение к ответу @ Tetsuya, похоже, у вас возникнут проблемы с Javascript, который вы передаете RegisterStartupScript.

Я не думаю, что вы сможете просто вызвать «verifyCallback», потому что это функция, определенная в рамках вызова $.definePage({}).

Так что вам нужно углубиться в это и выяснить, доступна ли функция verifyCallback публично.

На основании этого кода:

var onloadCallback = function() {
    page.carregarReCaptcha();
}

Я бы сказал, что вам нужно позвонить:

page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);
0 голосов
/ 06 ноября 2018

Проблема возникает из-за того, что вы пытаетесь использовать ClientScript экземпляр из класса, который не унаследован от System.Web.UI.Page (базовый класс для страниц с выделенным кодом). Пока у вас есть доступ к HttpContext.Current, вы можете извлечь экземпляр Page из его свойства обработчика (то есть CurrentHandler) и использовать ClientScript, как в примере ниже:

public class Script
{
    //See help for a definition of CustomScriptArguments.
    public CustomScriptReturn CustomScript(CustomScriptArguments args, object sender, EventArgs e)
    {
        // retrieve page from current handler
        var page = HttpContext.Current.CurrentHandler as Page;

        if (page == null)
        {
            // do something, e.g. throw exception
        }

        // Place your script code here.
        // Return empty for no special action.
        string response = args.DataRow["Token"];
        string script = "verifyCallback('" + response + "');";

        // call ClientScript from existing page instance
        page.ClientScript.RegisterStartupScript(page.GetType(), "verifyCallback", script, true);
        return CustomScriptReturn.Empty();
    }
}

Обновление:

Что касается объяснения второй ошибки после редактирования, то это произошло потому, что вы объявляете метод с именем callback внутри CustomScript метода, который недопустим (и оператор return должен быть указан последним). Если обработчики sender и EventArgs не нужны, просто опустите их. Вот пример для правильного возврата CustomScriptReturn:

public static CustomScriptReturn CustomScript(CustomScriptArguments args)
{
    // retrieve page from current handler
    var page = System.Web.HttpContext.Current.CurrentHandler as Page;

    if (page == null)
    {
        // do something, e.g. throw exception
    }

    // Place your script code here.
    // Return empty for no special action.
    string response = args.DataRow["Captcha"];
    string script = "page.verifyCallback('" + response + "');";

    // call ClientScript from existing page instance
    page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);

    return CustomScriptReturn.Empty();
}

Похожие проблемы:

Ссылка на объект требуется для нестатического поля, метода или свойства 'System.Web.UI.Page.ClientScript.get'

...