Example #1
0
        /// <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));
        }
Example #2
0
        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;
            }
            }
        }
Example #3
0
 /// <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));
 }