C# webBrowser(wpf/winform) 互调js

1.winform

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}

private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.ObjectForScripting = this;//具体公开的对象,这里可以公开自定义对象
webBrowser1.Navigate(Application.StartupPath + "/dom.html");
}

private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Document.InvokeScript("Run", new object[] { "test" });
}

public void ShowMsg(string msg)
{
MessageBox.Show(msg);
}

}

2.wpf

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.webBrowser1.ObjectForScripting = new OprateBasic();
Uri uri = new Uri(@"pack://application:,,,/dom.html");
Stream source = Application.GetResourceStream(uri).Stream;
webBrowser1.NavigateToStream(source);
}

private void btn1_Click(object sender, RoutedEventArgs e)
{
webBrowser1.InvokeScript("Run", new object[] { "test" });
}
}

[ComVisible(true)] // 将该类设置为com可访问
public class OprateBasic
{
public void ShowMsg(string msg)
{
MessageBox.Show(msg);
}
}

dom.html

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<script type="text/javascript" charset="utf-8">
function Run(str) {

window.external.ShowMsg(str);
}
</script>
</body>
</html>

时间: 2024-10-19 11:46:41

C# webBrowser(wpf/winform) 互调js的相关文章

winform中使用webBrowser时如何与JS交互

最近写一个GEPlugin项目,要用到geWebBrowser与JS进行交互. 这个geWebBrowser的事件 private void geWebBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { HtmlElement script = geWebBrowser1.Document.CreateElement("script"); script.SetAttrib

MFC与Webbrowser交互(通过JS)

最近修改老旧的MFC项目,用的网页做界面,和HTML交互采用的是COM方式,繁琐,丑陋又性能低,于是考虑利用js来进行界面交互,查了一天的资料,现在整理如下,供后来需要的人参考,虽然大概几乎不会有人用MFC来做项目了(笑),用winform或者WPF或者网页做界面,高性能部分用C++封装的dll也许是更好的选择,当然直接在exe里面提供http访问接口是最吼的(go语言赛高)!界面这个是比较大的话题,可以开个专题慢慢说了... 核心的一个CWebPage类是一个老外写的,封装了一些com操作,用

c# winform 调用js

1. 在winform中加入一个 WebBrowser 控件: 2. webBrowser控件加载html文件,html文件中包含了js代码, 代码如下(必须在 InitializeComponent(); 后加载): public Form1() { InitializeComponent(); System.IO.FileInfo file = new System.IO.FileInfo("index.htm"); // WebBrowser控件显示的网页路径 webBrowse

WPF+WinForm系统主页框架Demo(附带一些小功能!)

最近项目需要写一个系统综合演示平台,想用WPF写一个漂亮的界面,但是在把webbrowser控件嵌入时候,WPF恶心人的地方就出现了,具体什么原因我就在这里不说明了,总之就是WPF中不规则窗体与WebBrowser控件的兼容性问题.网上有很多办法,最终还是没能在我的主页框架上完美解决,最终还是放弃了.转用WinForm开发,顺带附加了一些小功能. WPF框架界面如下: PS:右下角的Ping值是不是有的朋友很熟悉啊?打Dota的朋友应该都知道,就是11对战平台上面的Ping值类似的!会根据你的网

[Winform]CefSharp ——js调用c#方法

摘要 有时我们在winform中嵌入浏览器,需要在页面上读取电脑上的一些信息,这个时候就需要用到CefSharp的RegisterJsObject进行注册方法然后供js进行调用了. 一个例子 我们在winform中嵌入的页面中,显示电脑的信息,电脑信息通过winform进行读取,js调用获取电脑信息的方法,并将最终结果以json字符串的形式传递到js端,js获取到这些信息并在页面上进行显示. 定义一个专门处理js回调的类 /// <summary> /// js c#回调类 /// </

富客户端 wpf, Winform 多线程更新UI控件

前言 在富客户端的app中,如果在主线程中运行一些长时间的任务,那么应用程序的UI就不能正常相应.因为主线程要负责消息循环,相应鼠标等事件还有展现UI. 因此我们可以开启一个线程来格外处理需要长时间的任务,但在富客户端中只有主线程才能更新UI的控件. 解决方法 简单的来说,我们需要从其他的线程来更新UI线程的控件,需要将这个操作转交给UI线程(线程marshal). 方法1: 在底层的操作中,可以有以下的方法: WPF中,在element的Dispatcher类中调用BeginInvoke或者I

C# Winform 执行JS脚本

方法1:利用Microsoft.JScript Microsoft.JScript.Eval.JScriptEvaluate("要执行的代码", Microsoft.JScript.Vsa.VsaEngine.CreateEngine()); 缺点:无法执行较为复杂的JS脚本 方法2:反射调用ScriptControl Type obj = Type.GetTypeFromProgID("ScriptControl"); if (obj == null) retur

WinForm程序执行JS代码的多种方法以及使用WebBrowser与JS交互

原文地址:http://www.cnblogs.com/feiyuhuo/p/5474790.html 方法一 使用微软官方组件Interop.MSScriptControl 1.msscript.ocx下载的地址   http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033 或者点击此处下载 Interop.MSScriptCon

WPF WebBrowser 不可见问题的解析[转]

问题概述: 1.在Xaml中加入WebBrowser(不论是WPF中的控件,还是Winform中的控件) 2.设置Window Background="Transparent" AllowsTransparency="True" 结果:WebBroser中的内容将不可见. 问题分析: 本人当时一WPF菜鸟,根本无从下手.实乃WPF已广为人知的问题.原因很简单: 1.所谓WPF中的WebBrowser控件实为利用MS WebBrowser 经过WPF封装,其实质和Wi