javascript - 如何在 Content Grabber 中使用 C# 调用 javascript 函数?
问题描述
我正在尝试在 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 token,它将验证我输入的token是否正确。
在我的 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# 不是很熟悉,所以如果能得到任何帮助,我将不胜感激。太感谢了!
解决方案
出现问题是因为您尝试使用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
inside CustomScript
method 的方法,该方法无效(并且该return
语句必须在最后)。如果sender
andEventArgs
处理程序是不必要的,那么简单地省略它们。这是一个正确返回的示例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();
}
相关问题:
推荐阅读
- react-native - 将整个应用程序从 React Native 59.8 迁移到 60+
- android - Android Jetpack 导航异常“无法从当前目的地找到导航”
- python - 使用 DSL 构建世界时的 SyntaxError
- android - 无法在条件语句中获取 Future 布尔值
- ios - M1:在带有 M1 芯片和 Big Sur 的 Mac 上使用模拟器 iOS 13 或更早版本和 Xcode 12.3 崩溃
- ios - 如何以编程方式从双卡 iPhone 中选择哪个 sim 卡发送短信?
- python - 带有双下标和期望符号的python图中的乳胶格式字符串问题
- django - 覆盖 Django 权限并修改 auth_permission
- android-jetpack-compose - 行内的 fillMaxHeight()
- python - kivy 中调用函数的问题(用 Python 的帮助编码)-.kv 文件中的调用函数