上一篇文章 簡單介紹 ClearScript
一個官方且跨平台的 Javascript Interpreter ,我們簡單介紹了 ClearScript
在實作中有幾個地方很常用到就在筆記一下,關於如何使用外部 .js 檔案,然後我再 javascript 中也可以引入還有使用 eval

1. 引入外部檔案,這邊比較簡單,網路上查一下,只要輸入這兩行,然後給入位置就可以引入外部檔案
//允許載入.js 檔案
//如果不加入下面引入會錯
engine.DocumentSettings.AccessFlags = Microsoft.ClearScript.DocumentAccessFlags.EnableFileLoading;
engine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full;
2. 這邊我準備了三個 .js 檔案 主要 我在 C# 這邊會呼叫 js1.js 中的 Test1() ,測試 require 有沒有,他會引入 circle.js 並且執行進行
圓的面積計算, Test2() 主要就是測試 eval() 有沒有用
.js 們
var Circle = function (radius) {
this.radius = radius
}
Circle.PI = 3.14
Circle.prototype = {
area: function () {
return Circle.PI * this.radius * this.radius;
}
}
//Call C# Proxys
function eval(code) {
return RA.Eval(code);
}
function require(fileName) {
RA.ReadData(fileName);
}
// JS Functions
function Echo(str) {
return str + "!!";
}
function Test1(a,b) {
require("circle.js");
var c = new Circle(2);
Console.WriteLine(c.area());
return c.area();
}
function Test2(a, b) {
require("js2.js");
eval('result=' + a + '+' + b);
return result;
}
function Main() {
Console.WriteLine(Echo('Hello, I am js1.js'));
}
Console.WriteLine(Echo('Hello, I am js2.js'));
3.上面你有看到我會呼叫一個 RA 跟 Console 這是因為我在 C# 端撰寫了相對應的 code.
RequireAgent
public class RequireAgent
{
private Microsoft.ClearScript.V8.V8ScriptEngine _Engine { get; set; }
public RequireAgent(Microsoft.ClearScript.V8.V8ScriptEngine engine)
{
_Engine = engine;
}
public string ReadData(string fileName)
{
string jsSource = System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + fileName);
_Engine.Execute(jsSource);
return jsSource;
}
public dynamic Eval(string code)
{
return _Engine.Evaluate(code);
}
}
4. 接下來就是主程式的部分
using (var engine = new Microsoft.ClearScript.V8.V8ScriptEngine())
{
//允許載入.js 檔案
//如果不加入下面引入會錯
engine.DocumentSettings.AccessFlags = Microsoft.ClearScript.DocumentAccessFlags.EnableFileLoading;
engine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full;
engine.AddHostType("Console", typeof(Console));
engine.AddHostObject("RA", new RequireAgent(engine));
var script = engine.CompileDocument(AppDomain.CurrentDomain.BaseDirectory + "js1.js");
engine.Execute(script);
var result = engine.Script.Test2(27, 22);
Console.WriteLine(result);
//Hello, I am js2.js!! : form js2.js
//49 : from line:20
}
這樣在程式佈局上就會簡單很多。