• 番外篇 之 JS调用


     C#Winform调用JS
    执行JSJavascript)方法
             课前知识储备:
                                                   1JS代码放置的位置。
             方法一: 使用微软官方组件Interop.MSScriptControl
                ScriptControlClass sc = new ScriptControlClass();//申明变量
               sc.UseSafeSubset = true; //允许执行不安全的代码
               sc.Language = "JScript"; //VBScript
               sc.AddCode(Properties.Resources.GetTimes);// Properties.Resources 资源文件
                                   要执行的方法名,执行的参数/如果无参那么就写方法名
               string str = sc.Run("time", newobject[] { "time()"}).ToString();
    //特别注意
    JS方法中无参数时,这时传递的为该方法名称.
    弊端:
                  必须携带DLL.
                  不支持x64 .
    区别:    方法一需要DLL,方法二反射的方法是不需要DLL的.
    方法一不支持X64,方法二支持.
    方法二在需要参数是字符串时,必须要使用 ”’”引号包起来.方法一则不用
    方法二:  利用反射获取组件
           
            /// <summary>
            /// 获取JS时间戳 13位
            /// </summary>
            /// <returns></returns>
            public string GetTimeByJs(string name)
            {
                Type obj = Type.GetTypeFromProgID("ScriptControl"); //从标识符中得到当前的type对象
                if (obj == null)
                {
                    return null;
                }
                object ScriptControl = Activator.CreateInstance(obj);//将得到的Type创建实例.
                obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JScript" });
                string js = "function time(name){return '你好' + name}";
                obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { js });
                return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time('" + name + "')" }).ToString();
            }


    不得不说的方法:
               在环境变量里面-系统变量-path-点编辑,在末尾添加";.netframework(注意编译版本)绝对路径"注意前面还有个分号,系统变量中不能有中文,空格..O了.直接cmd jec 调用编译就可以了. 例如:"jsc /t:library xxx.js"
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using MSScriptControl;
    using System.Reflection;
    
    namespace JsDemo
    { 
        public partial class Form1 : Form
        {
    
            public Form1()
            {
                InitializeComponent();
            }
            /// <summary>
            /// 密码加密
            /// </summary>
            /// <param name="pass"></param>
            /// <returns></returns>
            public string EncodePass(string pass)
            {
                ScriptControlClass sc = new ScriptControlClass();
                sc.UseSafeSubset = true;
                sc.Language = "JScript";
                sc.AddCode(Properties.Resources.GetTimes);
                //string str = sc.Run("b64_sha1", new object[] { pass }).ToString();
                string str = sc.Run("time", new object[] { "君临" }).ToString(); 
                return str;
            }
            private void btnEncrypt_Click(object sender, EventArgs e)
            {
                string Enstr = txtEnStr.Text;
                txtDeStr.Text=EncodePass(Enstr);
                //txtDeStr.Text = GetTimeByJs(Enstr);
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
    
            /// <summary>
            /// 获取JS时间戳 13位
            /// </summary>
            /// <returns></returns>
            public string GetTimeByJs(string name)
            {
                Type obj = Type.GetTypeFromProgID("ScriptControl"); //从标识符中得到当前的type对象
                if (obj == null)
                {
                    return null; 
                }
                object ScriptControl = Activator.CreateInstance(obj);//将得到的Type创建实例.
                obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JScript" });
                string js = "function time(name){return '你好' + name}";
                obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { js });
                return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time('" + name + "')" }).ToString();
            }
        }
    }
    View Code

    视频教程出自:http://www.xuanjics.com/thread-86-1-1.html

                        玄机论坛的地址:www.xuanjics.com  原创作者:君临

                        QQ交流群:16885911  
  • 相关阅读:
    [开源]WinForm 控件使用总结
    类型转换一种处理方式
    [算法]斐波那契数列
    [算法]1 − 2 + 3 − 4 + …
    [算法]冒泡排序
    [开源]基于Log4Net简单实现KafkaAppender
    基于Log4Net本地日志服务简单实现
    项目打jar包,怎么把第三放jar包一起打入
    将博客搬至CSDN
    将字段转换为阿拉伯数字
  • 原文地址:https://www.cnblogs.com/Time_1990/p/4079954.html
Copyright © 2020-2023  润新知