C# Winform 执行JS脚本

Posted 孤狼独啸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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) return null;
 scriptControl = Activator.CreateInstance(obj);
 obj.InvokeMember("Language", BindingFlags.SetProperty, null, scriptControl, new object[] { "javascript" });            
 obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, scriptControl, new object[] { "js脚本" });
 obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "执行的单条js脚本" });
//obj.InvokeMember("Run", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "js方法","方法参数" }); //这种方式也可以执行js脚本

如果想在调用的脚本中,与winform进行交互,可以在Eval之前,加上这么一句

obj.InvokeMember("AddObject", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "mySelObj", new JsComObject(), true });
JsComObject为自定义的类,注意,自定义类要加上[ComVisible(true)],否则会报错
[ComVisible(true)]
public class JsComObject
{

        public string atob(string text) {
            return XUtils.Base64Utils.DecodeBase64(text);
        }
}

 

缺点:性能不高,频繁调用,执行耗时长

优点:可以添加执行复杂的JS脚本。

网上还有一种方法,说是引用MSScriptControl类库,再初始化ScriptControlClass,来进行调用,但是我测试的结果是不行,ScriptControlClass这个类不允许实例化。

以上是关于C# Winform 执行JS脚本的主要内容,如果未能解决你的问题,请参考以下文章

winform WebBrowser控件中,cs后台代码执行动态生成的js

c# winform 网页录制执行脚本功能

C#使用技巧之调用JS脚本(转)

c# winform 调用js

XSS:如何从 C# 中的字符串中删除 JS 片段?

是否可以动态编译和执行 C# 代码片段?