簡體   English   中英

如何在Content Grabber中使用C#調用javascript函數?

[英]How can I call a javascript function using C# in Content Grabber?

我試圖在Content Grabber中使用C#調用Javascript函數。 (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#並不是很熟悉,因此我將不勝感激。 非常感謝!

發生此問題的原因是,您試圖使用不是從System.Web.UI.Page (代碼隱藏頁的基類)繼承的類的ClientScript實例。 只要您可以訪問HttpContext.Current ,就可以從其處理程序屬性(即CurrentHandler )中檢索Page實例,並使用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();
    }
}

更新:

至於解釋編輯后的第二個錯誤,發生該錯誤的原因是,您在CustomScript方法中聲明了一個名為callback方法,該方法無效(並且return語句必須位於最后一個)。 如果不需要senderEventArgs處理程序,則只需忽略它們。 這是正確返回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”需要對象引用。

除了@Tetsuya的答案外,似乎您傳遞給RegisterStartupScript的Java腳本也會遇到問題。

我認為您不能只調用“ verifyCallback”,因為這是在$.definePage({})調用范圍內定義的函數。

因此,您需要對此進行更深入的研究,並確定是否verifyCallback函數是公開公開的。

基於此代碼:

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

我說你需要打電話給:

page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM