亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用C#解析并運行JavaScript代碼

2019-11-17 02:28:58
字體:
來源:轉載
供稿:網友

使用C#解析并運行javaScript代碼

如果想在C#編程中解析并運行Javascript代碼,常見的方式有兩種:

  1. 利用COM組件“Microsoft Script Control”,可參見:C#使用技巧之調用JS腳本方法一
  2. 利用JScript.net,可參見:C#使用技巧之調用JS腳本方法二或從命令行編譯 JScript 代碼

這兩種方式都能達到在C#中執行JavaScript代碼的效果,不過各有利弊。 方法一對程序運行環境有要求,程序只能以x86為目標平臺。方法二實際是將JavaScript代碼編譯成為了.NET程序集,對JavaScript代碼有嚴格的格式要求,但是可以在任意平臺發布(支持跨平臺)。 除此之外,其實還有另一種方法來實現這個功能,兼容x86和x64平臺,不過僅限于在Windows下使用。而且對JavaScript代碼沒有嚴格的格式要求。

Windows Script Engines

Microsoft® Windows® Script Interfaces introduce a new way for an application to add scripting and OLE Automation capabilities. With the advent of the interfaces, hosts can call upon disparate scripting engines from multiple sources and vendors to perform scripting between components. The implementation of the script itself—language, syntax, persistent format, execution model, and so on—is left to the script vendor. The designers have taken care to allow hosts that rely on Windows Script to use arbitrary language back ends.

以上是微軟對Windows Script Engines的官方解釋,詳細信息可以參看:Microsoft Windows Script Interfaces - Introduction。簡單的說,Windows Script Engines 提供了一種新的方式,讓我們可以為應用程序添加腳本功能。 所以我們只需要將Windows Script Engines進行包裝即可。

調用示例

1、直接執行表達式:

Console.WriteLine(ScriptEngine.Eval("jscript", "1+2/3"));

將會輸出:1.66666666666667

2、調用有參數的方法:

using (ScriptEngine engine = new ScriptEngine("jscript")){  ParsedScript parsed = engine.Parse("function MyFunc(x){return 1+2+x}");  Console.WriteLine(parsed.CallMethod("MyFunc", 3));}

將會輸出:6

3、調用可選參數NameItem方法:

using (ScriptEngine engine = new ScriptEngine("jscript")){    ParsedScript parsed = engine.Parse("function MyFunc(x){return 1+2+x+My.Num}");    MyItem item = new MyItem();    item.Num = 4;    engine.SetNamedItem("My", item);    Console.WriteLine(parsed.CallMethod("MyFunc", 3));}[ComVisible(true)] // Script engines are COM components.public class MyItem{    public int Num { get; set; }}

將會輸出:10

如果宿主服務中安裝有IE9+的瀏覽器,那么我們可以調用更快的JavaScript引擎"chakra":

using (ScriptEngine engine = new ScriptEngine("{16d51579-a30b-4c8b-a276-0ff4dc41e755}")){    // continue with chakra now}

ScriptEngine.cs

上面只是部分的調用示例,但是應該可以滿足80%的業務需求。上面的代碼依賴于ScriptEngine類,完整的ScriptEngine.cs代碼如下:

/// <summary>/// RePResents a Windows Script Engine such as JScript, VBScript, etc./// </summary>public sealed class ScriptEngine : IDisposable{    /// <summary>    /// The name of the function used for simple evaluation.    /// </summary>    public const string MethodName = "EvalMethod";    /// <summary>    /// The default scripting language name.    /// </summary>    public const string DefaultLanguage = JavaScriptLanguage;    /// <summary>    /// The JavaScript or jscript scripting language name.    /// </summary>    public const string JavaScriptLanguage = "javascript";    /// <summary>    /// The javascript or jscript scripting language name.    /// </summary>    public const string VBScriptLanguage = "vbscript";    /// <summary>    /// The chakra javascript engine CLSID. The value is {16d51579-a30b-4c8b-a276-0ff4dc41e755}.    /// </summary>    public const string ChakraClsid = "{16d51579-a30b-4c8b-a276-0ff4dc41e755}";    private IActiveScript _engine;    private IActiveScriptParse32 _parse32;    private IActiveScriptParse64 _parse64;    internal ScriptSite Site;    private Version _version;    private string _name;    [Guid("BB1A2AE1-A4F9-11cf-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScript    {        [PreserveSig]        int SetScriptSite(IActiveScriptSite pass);        [PreserveSig]        int GetScriptSite(Guid riid, out IntPtr site);        [PreserveSig]        int SetScriptState(ScriptState state);        [PreserveSig]        int GetScriptState(out ScriptState scriptState);        [PreserveSig]        int Close();        [PreserveSig]        int AddNamedItem(string name, ScriptItem flags);        [PreserveSig]        int AddTypeLib(Guid typeLib, uint major, uint minor, uint flags);        [PreserveSig]        int GetScriptDispatch(string itemName, out IntPtr dispatch);        [PreserveSig]        int GetCurrentScriptThreadID(out uint thread);        [PreserveSig]        int GetScriptThreadID(uint win32ThreadId, out uint thread);        [PreserveSig]        int GetScriptThreadState(uint thread, out ScriptThreadState state);        [PreserveSig]        int InterruptScriptThread(uint thread, out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo, uint flags);        [PreserveSig]        int Clone(out IActiveScript script);    }    [Guid("4954E0D0-FBC7-11D1-8410-006008C3FBFC"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScriptProperty    {        [PreserveSig]        int GetProperty(int dwProperty, IntPtr pvarIndex, out object pvarValue);        [PreserveSig]        int SetProperty(int dwProperty, IntPtr pvarIndex, ref object pvarValue);    }    [Guid("DB01A1E3-A42B-11cf-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScriptSite    {        [PreserveSig]        int GetLCID(out int lcid);        [PreserveSig]        int GetItemInfo(string name, ScriptInfo returnMask, out IntPtr item, IntPtr typeInfo);        [PreserveSig]        int GetDocVersionString(out string version);        [PreserveSig]        int OnScriptTerminate(object result, System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);        [PreserveSig]        int OnStateChange(ScriptState scriptState);        [PreserveSig]        int OnScriptError(IActiveScriptError scriptError);        [PreserveSig]        int OnEnterScript();        [PreserveSig]        int OnLeaveScript();    }    [Guid("EAE1BA61-A4ED-11cf-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScriptError    {        [PreserveSig]        int GetExceptionInfo(out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);        [PreserveSig]        int GetSourcePosition(out uint sourceContext, out int lineNumber, out int characterPosition);        [PreserveSig]        int GetSourceLineText(out string sourceLine);    }    [Guid("BB1A2AE2-A4F9-11cf-8F20-00805F2CD064"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScriptParse32    {        [PreserveSig]        int InitNew();        [PreserveSig]        int AddScriptlet(string defaultName, string code, string itemName, string subItemName, string eventName, string delimiter, IntPtr sourceContextCookie, uint startingLineNumber, ScriptText flags, out string name, out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);        [PreserveSig]        int ParseScriptText(string code, string itemName, IntPtr context, string delimiter, int sourceContextCookie, uint startingLineNumber, ScriptText flags, out object result, out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);    }    [Guid("C7EF7658-E1EE-480E-97EA-D52CB4D76D17"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]    private interface IActiveScriptParse64    {        [PreserveSig]        int InitNew();        [PreserveSig]        int AddScriptlet(string defaultName, string code, string itemName, string subItemName, string eventName, string delimiter, IntPtr sourceContextCookie, uint startingLineNumber, ScriptText flags, out string name, out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);        [PreserveSig]        int ParseScriptText(string code, string itemName, IntPtr context, string delimiter, long sourceContextCookie, uint startingLineNumber, ScriptText flags, out object result, out System.Runtime.InteropServices.ComTypes.EXCEPINFO exceptionInfo);    }    [Flags]    private enum ScriptText    {        None = 0,        //DelayExecution = 1,        //IsVisible =
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩精品电影| 久久精品亚洲精品| 在线看福利67194| 国产精品啪视频| 成人激情在线播放| 欧美孕妇与黑人孕交| 2019中文字幕全在线观看| 国产一区二区三区四区福利| 不卡av电影院| 亚洲天堂免费观看| 欧美色videos| 亚洲欧美日韩中文在线| 国产精品高清在线| 亚洲国产精品免费| 久久精品国产99国产精品澳门| 欧美一级片在线播放| 美乳少妇欧美精品| 精品性高朝久久久久久久| 日韩亚洲欧美中文高清在线| 精品中文字幕在线| 日本不卡免费高清视频| 亚洲综合日韩中文字幕v在线| 最近2019年好看中文字幕视频| 亚洲日本成人女熟在线观看| 久久久久亚洲精品| 亚洲综合小说区| 久久久噜噜噜久久久| 国产情人节一区| 久久乐国产精品| 97视频在线播放| 久久99精品久久久久久噜噜| 亚洲成人av在线播放| 亚洲国产又黄又爽女人高潮的| 欧美大片欧美激情性色a∨久久| 亚洲欧美另类国产| 欧美一区二区大胆人体摄影专业网站| 国产激情久久久久| 久久久久一本一区二区青青蜜月| 这里只有精品视频在线| 精品中文字幕在线观看| 国产成人精品优优av| 亚洲精品视频在线观看视频| 91久久在线观看| 97视频国产在线| 午夜精品久久久久久久男人的天堂| 狠狠色噜噜狠狠狠狠97| 亚洲xxx大片| 日韩美女视频免费在线观看| 国产欧美日韩精品在线观看| 国产精品成av人在线视午夜片| 亚洲国产黄色片| 黑人巨大精品欧美一区二区免费| 亚洲欧美日韩在线高清直播| 97在线精品视频| 国产综合久久久久久| 亚洲免费av电影| 欧美精品videosex极品1| 欧美性理论片在线观看片免费| 国产精品美腿一区在线看| 国产日韩欧美另类| 日韩av影视综合网| 日韩二区三区在线| 国产亚洲欧美一区| 久久精品99无色码中文字幕| 97久久精品国产| 国产欧美在线播放| 成人国产亚洲精品a区天堂华泰| 96精品视频在线| 欧美日韩不卡合集视频| 国产精品网红福利| 一本一本久久a久久精品牛牛影视| 国产主播喷水一区二区| 91在线视频一区| 亚洲一区二区三区视频| 欧美人在线视频| 清纯唯美日韩制服另类| 欧美高清电影在线看| 成人有码在线视频| 欧美国产日韩二区| 这里只有视频精品| 国产精品av在线播放| 亚洲自拍另类欧美丝袜| 国产成人高清激情视频在线观看| 亚洲成人在线视频播放| 韩国精品美女www爽爽爽视频| 精品国内亚洲在观看18黄| 国产成人在线播放| 中文字幕一区二区精品| 91视频国产一区| 国产成人高潮免费观看精品| 日韩中文在线中文网在线观看| 91网在线免费观看| 91九色国产社区在线观看| 中文字幕精品av| 欧美在线视频播放| 久久久爽爽爽美女图片| 欧美性受xxxx黑人猛交| 欧美日韩亚洲一区二区三区| 亚洲激情视频在线播放| 久久久之久亚州精品露出| 夜夜嗨av一区二区三区免费区| 欧美激情视频一区二区三区不卡| 亚洲va欧美va国产综合剧情| 成人性生交大片免费观看嘿嘿视频| 精品国产一区二区三区四区在线观看| 91在线国产电影| 成人在线播放av| 久久综合久中文字幕青草| 国产在线观看精品一区二区三区| 欧美日韩精品二区| 操91在线视频| 亚洲精品国产精品自产a区红杏吧| 日韩成人久久久| 国产精品久久二区| 91精品久久久久久综合乱菊| 亚洲欧美激情四射在线日| 久久男人资源视频| 亚洲天堂男人的天堂| 欧美又大又粗又长| 亚洲第一网站免费视频| 久久久久久九九九| 国产亚洲欧洲在线| 欧美激情精品久久久久久黑人| 亚洲欧美日韩在线高清直播| 亚洲精品www久久久久久广东| 国产精品直播网红| 国产91精品高潮白浆喷水| 国内精品视频一区| 欧美放荡办公室videos4k| 九九久久久久久久久激情| 青青草99啪国产免费| 国产美女精品视频| 国产亚洲欧美视频| 日韩在线视频中文字幕| 国产一区二区丝袜高跟鞋图片| 高清亚洲成在人网站天堂| 亚洲综合精品伊人久久| 国产午夜精品一区二区三区| 久久乐国产精品| 国产精品劲爆视频| 成人深夜直播免费观看| 日韩欧美中文第一页| 欧美激情综合色| 国产午夜精品全部视频播放| 8x海外华人永久免费日韩内陆视频| 精品香蕉一区二区三区| 欧美福利视频在线观看| 亚洲欧美国产视频| 欧美日韩综合视频| 26uuu久久噜噜噜噜| 欧美午夜无遮挡| 最近日韩中文字幕中文| 国产成人精品国内自产拍免费看| 亚洲成人精品视频| 国产亚洲精品美女久久久久| 国产精品视频一区国模私拍| 成人国内精品久久久久一区| 久久夜色精品亚洲噜噜国产mv| 欧美xxxx18国产| 日韩av免费观影| 成人免费视频97| 国产精品成人观看视频国产奇米| 国产一区二区三区在线免费观看| 亚洲3p在线观看|