当前位置: 首页 > news >正文

c#展示网页并获取网页上触发按钮的值进行系统业务逻辑处理

日前项目上遇到需要调用一个第三方的监控接口,给对方参数后,会返回一个url地址,我方系统需要根据用户在网页上点击的不同按钮,要求如下:在打开违规提醒窗口时,需要注册Callback方法(含一个字符串类型 的入参)到浏览器组件中。在该方法中,判断接收入参为“goBackEdit”, 则关闭本窗口,操作员可以继续修改之前录入的内容,修改完成后可以再 次提交审核;当接收入参为“goOn”,则关闭本窗口

触发后续不同的逻辑处理,比如停止/继续,经过网上搜索写了一个调用demo代码如下:

1:新建BrowserCallback.cs文件:// 定义一个COM可见的类,用于处理JavaScript调用

// 定义一个COM可见的类,用于处理JavaScript调用
[ComVisible(true)]
public class BrowserCallback
{
    private readonly Form _hostForm;

    public event Action<string> GetWebActionHandler;

    public BrowserCallback(Form hostForm)
    {
        _hostForm = hostForm;
    }

    // JavaScript可调用的方法 
    public void HandleAction(string action)
    {
        // 确保在UI线程执行 
        if (_hostForm.InvokeRequired)
        {
            _hostForm.Invoke(new Action(() => HandleAction(action)));
            return;
        }
        // 关闭当前窗口 
        _hostForm.Close();
        //将网页上获取到的对于违规提醒窗的处理值:action传递给GetWebActionHandler事件处理程序
        GetWebActionHandler(action);
    }
}

2:新建一个模式弹框,要集成webBrowser显示接口返回的url:

public partial class FormWebBrower : Form
{
    public bool goOn = false;
    public FormWebBrower(string url)
    {
        InitializeComponent();
        InitializeBrowser(url);
    }

    private void InitializeBrowser(string url)
    {
        // 步骤2:初始化浏览器控件 
        var browser = new WebBrowser
        {
            Dock = DockStyle.Fill,
            ScriptErrorsSuppressed = true  //避免脚本错误弹窗
        };

        Controls.Add(browser);

        BrowserCallback callback = new BrowserCallback(this);
        callback.GetWebActionHandler += GetWebAction;
        // 步骤3:注册回调对象 
        browser.ObjectForScripting = callback;

        // 步骤4:加载包含回调的网页 
        //browser.Navigate(url);

        // 或加载本地HTML 
        browser.DocumentText = @"
             <html><body>
                 <button onclick='window.external.HandleAction(""goBackEdit"")'> 
                     返回修改 
                 </button>
                <button onclick='window.external.HandleAction(""goOn"")'> 
                     继续 
                 </button>
             </body></html>";
    }

    /// <summary>
    /// 在打开违规提醒窗口后,获取用户对于违规点击继续按钮,会触发此方法
    /// </summary>
    /// <param name="obj"></param>
    private void GetWebAction(string obj)
    {
        //MessageBox.Show("回调成功,参数为:" + obj);
        if (obj == "goOn")
        {
            goOn = true;
        }
    }

3.现在我们开始模拟调用:

//注意,这里给的地址只是提示作用,在第2段代码中,有模拟html的代码,用那个就可以测试 
FormWebBrower f2 = new FormWebBrower("接口返回的url地址");
 f2.ShowDialog();
 if(f2.goOn)
 {
     MessageBox.Show("可以继续操作");
 }
 else
 {
     MessageBox.Show("★警告:不可以继续操作");
 }

现在,运行结果如下:(这里给的地址只是提示作用,在第2段代码中,有模拟html的代码,用那个就可以测试

相关文章:

  • 详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME
  • 【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】
  • 机器学习-1:线性回归
  • WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
  • 计算机毕业设计——Springboot的旅游管理
  • Flask Web开发的重要概念和示例
  • Node.js中Express框架使用指南:从入门到企业级实践
  • 32单片机学习记录1之GPIO
  • Python实现决策树(Decision Tree)算法
  • 细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性
  • haproxy详解笔记
  • 如何在Java EE中使用标签库?
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • 基于Kotlin中Flow扩展重试方法
  • 【代码随想录】第八章-贪心算法
  • docker compose快速部署kafka-connect集群
  • rdian是一个结构体,pdian=^Rdian,list泛型做什么用?
  • macOs安装nvm
  • 【Android开发】安卓手机APP使用机器学习进行QR二维码识别(完整工程资料源码)
  • 计算机网络结课设计:通过思科Cisco进行中小型校园网搭建
  • 网站如何备份数据/厦门百度推广排名优化
  • 网站开发 明细/百度竞价排名是什么
  • 网站推广广告语/2021年年度关键词排名
  • 网站建设与网页设计专业的/贺州seo
  • 门户网站系统源码/广州seo成功案例
  • 用.net做网站好_还是用php/百度网盘云资源搜索引擎