赞
踩
在开发过程中,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# 中的交互方法,如有不当之处,请多多指正......
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。