zoukankan      html  css  js  c++  java
  • 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这个类不允许实例化。

  • 相关阅读:
    Spark中文指南(入门篇)-Spark编程模型(一)
    Scala入门学习笔记三--数组使用
    沃老师学生的成绩
    Codeforces Round #461 (Div. 2) DRobot Vacuum Cleaner
    Codeforces Round #461 (Div. 2) ABC
    Educational Codeforces Round 37 (Rated for Div. 2) ABC
    Codeforces Round #460 (Div. 2) D Substring
    Codeforces Round #460 (Div. 2) ABC
    中缀式转后缀式求表达式结果
    计算器——python正则表达式
  • 原文地址:https://www.cnblogs.com/gulangduxiao/p/12312015.html
Copyright © 2011-2022 走看看