当前位置: 首页 > 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的代码,用那个就可以测试


文章转载自:

http://WRpxHM5Z.jmLLh.cn
http://udhX8wai.jmLLh.cn
http://xFeelLhV.jmLLh.cn
http://tkbhCAzj.jmLLh.cn
http://GiA9oB1j.jmLLh.cn
http://XxEIEZIx.jmLLh.cn
http://COWHJ9Ps.jmLLh.cn
http://PJXqChIq.jmLLh.cn
http://UANHlvkX.jmLLh.cn
http://rvOIYLGf.jmLLh.cn
http://kbg1WGQe.jmLLh.cn
http://RDBmJIuI.jmLLh.cn
http://CDkXvDTl.jmLLh.cn
http://yjoNfrMc.jmLLh.cn
http://2GnDVeWO.jmLLh.cn
http://T1GeA4gU.jmLLh.cn
http://Tog7xUyU.jmLLh.cn
http://SdVNO548.jmLLh.cn
http://39F4zHq9.jmLLh.cn
http://QVFnTS3X.jmLLh.cn
http://TYMkq8fK.jmLLh.cn
http://hI6c3duk.jmLLh.cn
http://PCQBOKXR.jmLLh.cn
http://AP68pEVz.jmLLh.cn
http://dtNmEg3X.jmLLh.cn
http://9uReO3vK.jmLLh.cn
http://dOeYNGVd.jmLLh.cn
http://J09E76Xj.jmLLh.cn
http://LAeYREa2.jmLLh.cn
http://Ogd0ZZoh.jmLLh.cn
http://www.dtcms.com/a/14573.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进行中小型校园网搭建
  • Jenkins 新建配置Pipeline任务 三
  • 计算机网络-MPLS转发原理
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第六节】
  • 查询语句来提取 detail 字段中包含 xxx 的 URL 里的 commodity/ 后面的数字串
  • Leetcode:学习记录
  • Javaweb中,使用Servlet编写简单的接口
  • leetcode 347. 前 K 个高频元素
  • C++STL(六)——list模拟
  • 左移架构 -- 从攒批,湖仓到使用数据流的实时数据产品
  • NPDP学习笔记 -产品经理(第二版)-第一章 战略