C# 引用 WebBrowser、WebKitBrowser、CefSharp 数据交互的方法

在开发过程中,C#引用BS端的页面可谓 繁琐,下面就 常见的 交互方法 分享给大家

一: 最基础的 WebBrowser        

1、在窗体拖入 WebBrowser   控件后先设置COM可见,否则会报错       
 

  //必须要有      
 [System.Runtime.InteropServices.ComVisibleAttribute(true)]
 public partial class MyFormTest : Form
        { 
           public MyFormTest ()
           {

                InitializeComponent();

            }

            public void ShowMyData(string MyParams) // 在JS中可调用测方法
            {

            }

     }

2  设置webBrowser 的属性  

private void MyFormTest_Load(object sender, EventArgs e)
  {
           webBrowser1.ScriptErrorsSuppressed = true;
            webBrowser1.IsWebBrowserContextMenuEnabled = false;
            webBrowser1.WebBrowserShortcutsEnabled = false;
            webBrowser1.AllowWebBrowserDrop = false;
            webBrowser1.ObjectForScripting = this;  //通过这个可以把winform中的变量传递到js中,类型必须是com可见;
            string url = Application.StartupPath + @"\MainHTML.html";         
            webBrowser1.Navigate(url);

 }

3 、webBrowser 的与C# 交互

      C# 调用JS       

 //CreatPttjChart 为js的 方法,无参数
 webBrowser1.Document.InvokeScript("CreatPttjChart"); 
// GetWarmningInfo为有参数的 JS
 webBrowser1.Document.InvokeScript("GetWarmningInfo", new string[] { monJson, dataJson });
//  ControlID 为html中的控件
webBrowser1.Document.All["ControlID"].SetAttribute("InnerText", "要传入的数据");  

      JS 调用 C# 的方法

  window.external.ShowMyData("我的测试数据") 

二: 基于open-webkit-sharp-master 的 WebKitBrowser  C#与 JS 进行交互(引用方法参照

https://blog.csdn.net/wn2utt18/article/details/85781818,不在赘述)

 1、在窗体拖入 WebKitBrowser  控件后先设置COM可见,否则会报错         

 [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]//COM+组件可见
public partial class MyFormTest : Form
{

}  // 

2  设置WebKitBrowser  的属性      

  private void MyFormTest_Load(object sender, EventArgs e)
   {
           string url = Application.StartupPath + @"\MainHTML.html";

            webKitBrowser1.DocumentCompleted += new    WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);        
            webKitBrowser1.Navigate(url);

  }

 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
 {
            webBrowser1.GetScriptManager.ScriptObject = this;//设置脚本对象
            webBrowser1.GetScriptManager.EvaluateScript("var obj=window.external;");//设置脚本前缀兼容webbrowser的写法
 }

3 、WebKitBrowser 的与C# 交互

      C# 调用JS       

//CreatBJSLChart为js的 方法,无参数
webKitBrowser1.GetScriptManager.CallFunction("CreatBJSLChart", new string[] { string.Empty });

 // 有参数的 JS         
webKitBrowser1.GetScriptManager.CallFunction("GetWarmningInfo", new string[] { monJson, dataJson }); 

//设置控件的值
webKitBrowser1.GetScriptManager.CallFunction("SetAttribute", new string[] { LableId, Value });  

        

      JS 调用 C# 的方法

       

window.external.ShowMyData("我的测试数据") 

三: 基于CefSharp 的 ChromiumWebBrowser C#与 JS 进行交互(引用方法参照

  https://blog.csdn.net/yh0503/article/details/86648682,不在赘述)

1、设置参数     

//初始化浏览器并启动
 public void InitializeChromium()
 {
       CefSettings settings = new CefSettings();
       // Initialize cef with the provided settings
       Cef.Initialize(settings);
       // Create a browser component
       chromeBrowser = new ChromiumWebBrowser("https://www.baidu.com");
        // Add it to the form and fill it to the form window.
       this.Controls.Add(chromeBrowser);
       chromeBrowser.Dock = DockStyle.Fill;
       
       //需要添加此句代码,否则下面执行会报错
        CefSharpSettings.LegacyJavascriptBindingEnabled = true;                
        // Register an object in javascript named "cefCustomObject" with function of 
        // the CefCustomObject class :3
       chromeBrowser.RegisterJsObject("cefCustomObject", new CefCustomObject(chromeBrowser, this));  //过时的话。用下面的

   chromeBrowser.JavascriptObjectRepository.Register("cefCustomObject", new 
           CefCustomObject(chromeBrowser, this), isAsync: false, options: 
           BindingOptions.DefaultBinder);
}
        
 //窗体关闭时,记得停止浏览器
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     Cef.Shutdown();
 }    

2、   ChromiumWebBrowser C#与 JS 进行交互

CWebBrowser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc);//注册事件

private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
{
     //EvaluateScriptAsync为调用JS的方法
    string Mydata = “MyParams”; //我的参数值
    string JSFunction = "initControValue('" + Mydata + "')"; //我的JS方法是 JSFunction 
                   
    this.CWebBrowser.EvaluateScriptAsync(JSFunction );

    // 设置值 
    this.CWebBrowser.EvaluateScriptAsync("document.getElementById('testid2').value='123'");

}

 

以上就是三种控件的 在C# 中的交互方法,如有不当之处,请多多指正......

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CefSharp是一个基于Chromium的.NET WinForms和WPF浏览器控件,可以通过以下步骤填充表单数据: 1. 获取WebBrowser控件的浏览器对象 ```csharp var browser = webBrowser1.GetBrowser(); ``` 2. 在页面加载完成后,执行JavaScript代码填充表单数据 ```csharp browser.FrameLoadEnd += (sender, args) => { if (args.Frame.IsMain) { browser.ExecuteScriptAsync("document.getElementById('username').value = 'myUsername';"); browser.ExecuteScriptAsync("document.getElementById('password').value = 'myPassword';"); } }; ``` 在上面的代码中,我们使用ExecuteScriptAsync方法执行JavaScript代码来填充表单数据。可以使用document.getElementById方法获取表单元素,然后设置其值。 注意:这只是一个简单的示例,实际上您可能需要根据页面的实际情况进行更复杂的表单数据填充。 3. 提交表单并处理响应(可选) 如果您需要提交表单,并处理响应,可以使用CefSharp的Load方法加载包含表单数据的URL,并在页面加载完成后获取响应内容。 ```csharp browser.FrameLoadEnd += (sender, args) => { if (args.Frame.IsMain && args.Frame.Url == "http://example.com/form") { browser.ExecuteScriptAsync("document.getElementById('username').value = 'myUsername';"); browser.ExecuteScriptAsync("document.getElementById('password').value = 'myPassword';"); browser.ExecuteScriptAsync("document.forms[0].submit();"); } else if (args.Frame.IsMain) { // 获取响应内容 var response = args.Frame.GetSourceAsync().Result; // 处理响应内容 } }; ``` 在上面的代码中,我们使用ExecuteScriptAsync方法提交表单,然后在页面加载完成后获取响应内容并处理它。 希望这可以帮助您填充表单数据并处理响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值