[C#] 透過C# 執行javascript code 並且執行得到結果

2017-01-20

之前有一個想法就是讓客戶去寫一點程式讓他去展現他要做的折價規則,像是滿千送百或是滿三千送五百之類的,如果要做畫面之後客戶想改規則都要花很多時間,不過這只是一個想法結果找一下網路上資料真的有做法而且程式不難。

Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));

dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "javascript";

var res = obj.Eval("x=2999;  x=x-((Math.floor(x/1000))*100);");

Response.Write(res);

上面案例 我設定公式是  x=x-((Math.floor(x/1000))*100); 然後假設使用者消費是2999 滿千送百這樣經過公式算出來的結果是 2799 ,很方便吧。

這裡面我比較好奇的是 Type.GetTypeFromCLSID 到底是什麼? 上網看一下文件 "GetTypeFromCLSID 方法支援晚期繫結存取 unmanaged COM 物件從.NET Framework 應用程式時您知道 COM 物件的類別識別項 (CLSID)。 COM 類別的類別識別項被定義在登錄的 HKEY_CLASSES_ROOT\CLSID 索引鍵。 您可以擷取的值 IsCOMObject 屬性來判斷這個方法所傳回的型別是否為 COM 物件"

我在我本機電腦上面是在 HKEY_CLASSES_ROOT\MSScriptControl.ScriptControl\CLSID 這地方找到那GUID
image
如果你是寫網頁的話,透過這方法可以讓你在Server端驗證客戶寫的Javascript ,而不用在前端用eval去驗證,這應用非常的廣,剛好看到網路上有這樣的作法,筆記一下。

參考來源:
https://msdn.microsoft.com/zh-tw/library/980t1w1t(v=vs.110).aspx
http://stackoverflow.com/questions/16075775/calling-the-javascript-functions-inside-c-sharp-for-a-64-bit-project


當麻許的超技八 2014 | Donma Hsu Design.