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

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://www.kler.cn/a/547176.html

相关文章:

  • vue3 关于插槽的使用
  • 手写一个Java Android Binder服务及源码分析
  • 云创智城充电系统:基于 SpringCloud 的高可用、可扩展架构详解-多租户、多协议兼容、分账与互联互通功能实现
  • git bash在github的库中上传或更新本地文件
  • SOUI基于Zint生成Code 39码
  • 【面试】网络安全常问150道面试题
  • Vue 2 + Webpack 项目中集成 ESLint 和 Prettier
  • 前端包管理器的发展以及Npm、Yarn和Pnpm对比
  • Netty源码解析之异步处理(二):盛赞Promise中的集合设计
  • 三、k8s pod详解
  • SQLMesh系列教程-3:SQLMesh模型属性详解
  • 算法04-希尔排序
  • Windows搭建Docker+Ollama+Open-WebUI部署DeepSeek本地模型
  • GPT和BERT
  • /etc/profile vs ~/.bashrc:如何正确使用?
  • VoIP之Jitter Buffer(抖动缓冲器)
  • Oracle RHEL 7.8 安装
  • 【BUG】conda虚拟环境下,pip install安装直接到全局python目录中
  • 总结:使用JDK原生HttpsURLConnection,封装HttpsUtil工具类,加载自定义证书验证,忽略ssl证书验证
  • c# textbox 设置不获取光标