/// <summary> /// Init a JavaScript runner with context. /// In Debug mode, the script name will be the first row of the script, normalized. /// </summary> public static JsScriptRunner RunnerWithContext(JsScriptRunnerType type, object scriptingContext, string contextName) { if (scriptingContext is null) { throw new ArgumentNullException(nameof(scriptingContext)); } if (contextName is null) { throw new ArgumentNullException(nameof(contextName)); } return(new JsScriptRunner(type: type, scriptingContext: scriptingContext, contextName: contextName)); }
private JsScriptRunner(JsScriptRunnerType type, object scriptingContext = null, string contextName = null) { if (!(scriptingContext is null) && contextName is null) { throw new ArgumentNullException(nameof(contextName)); } ScriptingContext = scriptingContext; Type = type; switch (type) { case JsScriptRunnerType.Jint: { // engine settings: // strict mode https://stackoverflow.com/a/34302448 https://stackoverflow.com/questions/34301881/should-i-use-strict-for-every-single-javascript-function-i-write JintEngine = new Engine(cfg => cfg.Strict(true)); //JintEngine = new Engine(); if (!(scriptingContext is null)) { JintEngine.SetValue(contextName, scriptingContext); // pass 'scriptingConnector' to Js } break; } case JsScriptRunnerType.ClearScript: { //ClearScriptEngine = new V8ScriptEngine(); //ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion); ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.DisableGlobalMembers); ClearScriptEngine.AllowReflection = false; //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.Full; //ClearScriptEngine.DefaultAccess = Microsoft.ClearScript.ScriptAccess.None; if (!(scriptingContext is null)) { ClearScriptEngine.AddHostObject(contextName, scriptingContext); // pass 'scriptingConnector' to Js } break; } case JsScriptRunnerType.ClearScriptDebugMode: { ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.DisableGlobalMembers | V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart); /* ClearScriptEngine = new V8ScriptEngine(V8ScriptEngineFlags.EnableDateTimeConversion | V8ScriptEngineFlags.DisableGlobalMembers | V8ScriptEngineFlags.EnableDebugging | V8ScriptEngineFlags.EnableRemoteDebugging | V8ScriptEngineFlags.AwaitDebuggerAndPauseOnStart);*/ ClearScriptEngine.AllowReflection = false; if (!(scriptingContext is null)) { ClearScriptEngine.AddHostObject(contextName, scriptingContext); // pass 'scriptingConnector' to Js } break; } } }
/// <summary> /// Init a JavaScript runner without context. /// In Debug mode, the script name will be the first row of the script, normalized. /// </summary> public static JsScriptRunner RunnerWithoutContext(JsScriptRunnerType type) { return(new JsScriptRunner(type: type, scriptingContext: null, contextName: null)); }