public static string GetModeName(JsEngineMode mode) { string modeName; switch (mode) { case JsEngineMode.Classic: modeName = "Classic"; break; case JsEngineMode.ChakraActiveScript: modeName = "Chakra ActiveScript"; break; case JsEngineMode.ChakraIeJsRt: modeName = "Chakra IE JsRT"; break; case JsEngineMode.ChakraEdgeJsRt: modeName = "Chakra Edge JsRT"; break; default: throw new NotSupportedException(); } return(modeName); }
public MsieJsEngine(JsEngineMode engineMode) : this(new JsEngineSettings { EngineMode = engineMode }) { }
public MsieJsEngine(JsEngineMode engineMode, bool useEcmaScript5Polyfill) : this(new JsEngineSettings { EngineMode = engineMode, UseEcmaScript5Polyfill = useEcmaScript5Polyfill }) { }
/// <summary> /// Constructs an instance of the Chakra JsRT engine /// </summary> /// <param name="engineMode">JS engine mode</param> /// <param name="enableDebugging">Flag for whether to enable script debugging features</param> protected ChakraJsRtJsEngineBase(JsEngineMode engineMode, bool enableDebugging) : base(engineMode) { _enableDebugging = enableDebugging; #if NETSTANDARD1_3 _externalObjectFinalizeCallback = ExternalObjectFinalizeCallback; #endif }
public MsieJsEngine(JsEngineMode engineMode, bool useEcmaScript5Polyfill, bool useJson2Library) : this(new JsEngineSettings { EngineMode = engineMode, UseEcmaScript5Polyfill = useEcmaScript5Polyfill, UseJson2Library = useJson2Library }) { }
/// <summary> /// Constructs an instance of the Chakra JsRT JavaScript engine /// </summary> /// <param name="engineMode">JavaScript engine mode</param> /// <param name="enableDebugging">Flag for whether to enable script debugging features</param> protected ChakraJsRtJsEngineBase(JsEngineMode engineMode, bool enableDebugging) { _engineMode = engineMode; _engineModeName = JsEngineModeHelpers.GetModeName(engineMode); _enableDebugging = enableDebugging; #if NETSTANDARD1_3 _externalObjectFinalizeCallback = ExternalObjectFinalizeCallback; #endif }
/// <summary> /// Constructs an instance of the wrapper for object, that implements <see cref="IReflect"/> interface /// </summary> /// <param name="target">Target object</param> /// <param name="engineMode">JavaScript engine mode</param> public HostObject(object target, JsEngineMode engineMode) { _target = target; _type = target.GetType(); _engineMode = engineMode; var defaultBindingFlags = BindingFlags.Instance | BindingFlags.Public; _fields = _type.GetFields(defaultBindingFlags); _properties = _type.GetProperties(defaultBindingFlags); _methods = _type.GetMethods(defaultBindingFlags); }
/// <summary> /// Constructs an instance of the ActiveScript JavaScript engine /// </summary> /// <param name="clsid">CLSID of JavaScript engine</param> /// <param name="engineMode">JavaScript engine mode</param> /// <param name="lowerIeVersion">Lowest supported version of Internet Explorer</param> /// <param name="languageVersion">Version of script language</param> /// <param name="useEcmaScript5Polyfill">Flag for whether to use the ECMAScript 5 Polyfill</param> /// <param name="useJson2Library">Flag for whether to use the JSON2 library</param> protected ActiveScriptJsEngineBase(string clsid, JsEngineMode engineMode, string lowerIeVersion, ScriptLanguageVersion languageVersion, bool useEcmaScript5Polyfill, bool useJson2Library) { _engineMode = engineMode; _engineModeName = JsEngineModeHelpers.GetModeName(engineMode); _documentVersion = DateTime.UtcNow.ToString("o"); _dispatcher.Invoke(() => { _pActiveScript = IntPtr.Zero; try { _pActiveScript = ComHelpers.CreateInstanceByClsid <IActiveScript>(clsid); _activeScript = (IActiveScript)Marshal.GetObjectForIUnknown(_pActiveScript); } catch (Exception e) { throw new JsEngineLoadException( string.Format(CommonStrings.Runtime_IeJsEngineNotLoaded, _engineModeName, lowerIeVersion, e.Message), _engineModeName); } if (languageVersion != ScriptLanguageVersion.None) { var activeScriptProperty = _activeScript as IActiveScriptProperty; if (activeScriptProperty != null) { object scriptLanguageVersion = (int)languageVersion; uint result = activeScriptProperty.SetProperty((uint)ScriptProperty.InvokeVersioning, IntPtr.Zero, ref scriptLanguageVersion); if (result != (uint)ScriptHResult.Ok) { throw new JsEngineLoadException( string.Format(NetFrameworkStrings.Runtime_ActiveScriptLanguageVersionSelectionFailed, languageVersion)); } } } _activeScriptParse = new ActiveScriptParseWrapper(_pActiveScript, _activeScript); _activeScriptParse.InitNew(); _pActiveScriptGarbageCollector = ComHelpers.QueryInterfaceNoThrow <IActiveScriptGarbageCollector>(_pActiveScript); _activeScriptGarbageCollector = _activeScript as IActiveScriptGarbageCollector; _activeScript.SetScriptSite(this); _activeScript.SetScriptState(ScriptState.Started); InitScriptDispatch(); }); LoadResources(useEcmaScript5Polyfill, useJson2Library); }
/// <summary> /// Constructs an instance of the Active Script engine /// </summary> /// <param name="engineMode">JS engine mode</param> /// <param name="enableDebugging">Flag for whether to enable script debugging features</param> /// <param name="useEcmaScript5Polyfill">Flag for whether to use the ECMAScript 5 Polyfill</param> /// <param name="useJson2Library">Flag for whether to use the JSON2 library</param> protected ActiveScriptJsEngineBase(JsEngineMode engineMode, bool enableDebugging, bool useEcmaScript5Polyfill, bool useJson2Library) : base(engineMode) { string clsid; string lowerIeVersion; ScriptLanguageVersion languageVersion; if (_engineMode == JsEngineMode.ChakraActiveScript) { clsid = ClassId.Chakra; lowerIeVersion = "9"; languageVersion = ScriptLanguageVersion.EcmaScript5; } else if (_engineMode == JsEngineMode.Classic) { clsid = ClassId.Classic; lowerIeVersion = "6"; languageVersion = ScriptLanguageVersion.None; } else { throw new NotSupportedException(); } _dispatcher.Invoke(() => { try { _activeScriptWrapper = new ActiveScriptWrapper(clsid, languageVersion); } catch (Exception e) { throw new JsEngineLoadException( string.Format(CommonStrings.Runtime_IeJsEngineNotLoaded, _engineModeName, lowerIeVersion, e.Message), _engineModeName); } if (enableDebugging) { StartDebugging(); } _activeScriptWrapper.SetScriptSite(new ScriptSite(this)); _activeScriptWrapper.InitNew(); _activeScriptWrapper.SetScriptState(ScriptState.Started); InitScriptDispatch(); }); LoadResources(useEcmaScript5Polyfill, useJson2Library); }
/// <summary> /// Constructs instance of MSIE JavaScript engine /// </summary> /// <param name="settings">JavaScript engine settings</param> /// <exception cref="MsieJavaScriptEngine.JsEngineLoadException">Failed to load a JavaScript engine.</exception> /// <exception cref="System.NotSupportedException">Selected mode of JavaScript engine is not supported.</exception> public MsieJsEngine(JsEngineSettings settings) { JsEngineMode engineMode = settings.EngineMode; JsEngineMode processedEngineMode = engineMode; if (engineMode == JsEngineMode.Auto) { if (ChakraJsRtJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.ChakraJsRt; } else if (ChakraActiveScriptJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.ChakraActiveScript; } else if (ClassicActiveScriptJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.Classic; } else { throw new JsEngineLoadException(Strings.Runtime_JsEnginesNotFound); } } switch (processedEngineMode) { case JsEngineMode.ChakraJsRt: _jsEngine = new ChakraJsRtJsEngine(); break; case JsEngineMode.ChakraActiveScript: _jsEngine = new ChakraActiveScriptJsEngine(); break; case JsEngineMode.Classic: _jsEngine = new ClassicActiveScriptJsEngine(settings.UseEcmaScript5Polyfill, settings.UseJson2Library); break; default: throw new NotSupportedException( string.Format(Strings.Runtime_JsEngineModeNotSupported, processedEngineMode)); } }
/// <summary> /// Constructs an instance of the wrapper for item, that implements <see cref="IReflect"/> interface /// </summary> /// <param name="type">Target type</param> /// <param name="target">Target object</param> /// <param name="engineMode">JavaScript engine mode</param> /// <param name="instance">Flag for whether to allow access to members of the instance</param> protected HostItemBase(Type type, object target, JsEngineMode engineMode, bool instance) { _type = type; _target = target; _engineMode = engineMode; BindingFlags bindingFlags = BindingFlags.Public; if (instance) { bindingFlags |= BindingFlags.Instance; } else { bindingFlags |= BindingFlags.Static; } _fields = _type.GetFields(bindingFlags); _properties = _type.GetProperties(bindingFlags); _methods = _type.GetMethods(bindingFlags); }
/// <summary> /// Makes a mapping of value from the host type to a script type /// </summary> /// <param name="value">The source value</param> /// <param name="engineMode">JavaScript engine mode</param> /// <returns>The mapped value</returns> public static object MapToScriptType(object value, JsEngineMode engineMode) { if (value == null) { return DBNull.Value; } if (value is Undefined) { return null; } if (TypeConverter.IsPrimitiveType(value.GetType())) { return value; } var result = new HostObject(value, engineMode); return result; }
/// <summary> /// Makes a mapping of value from the host type to a script type /// </summary> /// <param name="value">The source value</param> /// <param name="engineMode">JavaScript engine mode</param> /// <returns>The mapped value</returns> public static object MapToScriptType(object value, JsEngineMode engineMode) { if (value == null) { return(DBNull.Value); } if (value is Undefined) { return(null); } if (TypeConverter.IsPrimitiveType(value.GetType())) { return(value); } var result = new HostObject(value, engineMode); return(result); }
public static string GetModeName(JsEngineMode mode) { string modeName; switch (mode) { case JsEngineMode.Classic: modeName = "Classic"; break; case JsEngineMode.ChakraActiveScript: modeName = "Chakra ActiveScript"; break; case JsEngineMode.ChakraIeJsRt: modeName = "Chakra IE JsRT"; break; case JsEngineMode.ChakraEdgeJsRt: modeName = "Chakra Edge JsRT"; break; default: throw new NotSupportedException(); } return modeName; }
/// <summary> /// Constructs instance of MSIE JavaScript engine /// </summary> /// <param name="settings">JavaScript engine settings</param> /// <exception cref="MsieJavaScriptEngine.JsEngineLoadException">Failed to load a JavaScript engine.</exception> /// <exception cref="System.NotSupportedException">Selected mode of JavaScript engine is not supported.</exception> public MsieJsEngine(JsEngineSettings settings) { JsEngineMode engineMode = settings.EngineMode; JsEngineMode processedEngineMode = engineMode; if (engineMode == JsEngineMode.Auto) { if (ChakraEdgeJsRtJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.ChakraEdgeJsRt; } else if (ChakraIeJsRtJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.ChakraIeJsRt; } #if !NETSTANDARD1_3 else if (ChakraActiveScriptJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.ChakraActiveScript; } else if (ClassicActiveScriptJsEngine.IsSupported()) { processedEngineMode = JsEngineMode.Classic; } #endif else { throw new JsEngineLoadException( #if NETSTANDARD1_3 NetCoreStrings.Runtime_JsEnginesNotFound #else NetFrameworkStrings.Runtime_JsEnginesNotFound #endif ); } } lock (_creationSynchronizer) { JsEngineMode previousMode = _currentMode; switch (processedEngineMode) { case JsEngineMode.ChakraEdgeJsRt: if (previousMode != JsEngineMode.ChakraIeJsRt && previousMode != JsEngineMode.ChakraActiveScript) { _jsEngine = new ChakraEdgeJsRtJsEngine(settings.EnableDebugging); } else if (previousMode == JsEngineMode.ChakraIeJsRt) { throw new JsEngineLoadException( string.Format( CommonStrings.Runtime_JsEnginesConflictInProcess, JsEngineModeHelpers.GetModeName(processedEngineMode), JsEngineModeHelpers.GetModeName(previousMode) ) ); } else if (previousMode == JsEngineMode.ChakraActiveScript) { throw new JsEngineLoadException( string.Format( CommonStrings.Runtime_JsEnginesConflictInProcess, JsEngineModeHelpers.GetModeName(processedEngineMode), JsEngineModeHelpers.GetModeName(previousMode) ) ); } break; case JsEngineMode.ChakraIeJsRt: if (previousMode != JsEngineMode.ChakraEdgeJsRt) { _jsEngine = new ChakraIeJsRtJsEngine(settings.EnableDebugging); } else { throw new JsEngineLoadException( string.Format( CommonStrings.Runtime_JsEnginesConflictInProcess, JsEngineModeHelpers.GetModeName(processedEngineMode), JsEngineModeHelpers.GetModeName(previousMode) ) ); } break; case JsEngineMode.ChakraActiveScript: #if !NETSTANDARD1_3 if (previousMode != JsEngineMode.ChakraEdgeJsRt) { _jsEngine = new ChakraActiveScriptJsEngine(); } else { throw new JsEngineLoadException( string.Format( CommonStrings.Runtime_JsEnginesConflictInProcess, JsEngineModeHelpers.GetModeName(processedEngineMode), JsEngineModeHelpers.GetModeName(previousMode) ) ); } break; #else throw new NotSupportedException( string.Format(NetCoreStrings.Runtime_JsEngineModeNotCompatibleWithNetCore, processedEngineMode)); #endif case JsEngineMode.Classic: #if !NETSTANDARD1_3 _jsEngine = new ClassicActiveScriptJsEngine(settings.UseEcmaScript5Polyfill, settings.UseJson2Library); break; #else throw new NotSupportedException( string.Format(NetCoreStrings.Runtime_JsEngineModeNotCompatibleWithNetCore, processedEngineMode)); #endif default: throw new NotSupportedException( string.Format(CommonStrings.Runtime_JsEngineModeNotSupported, processedEngineMode)); } _currentMode = processedEngineMode; } }
/// <summary> /// Constructs an instance of the wrapper for object, that implements <see cref="IReflect"/> interface /// </summary> /// <param name="target">Target object</param> /// <param name="engineMode">JavaScript engine mode</param> public HostObject(object target, JsEngineMode engineMode) : base(target.GetType(), target, engineMode, true) { }
/// <summary> /// Makes a mapping of array items from the host type to a script type /// </summary> /// <param name="args">The source array</param> /// <param name="engineMode">JavaScript engine mode</param> /// <returns>The mapped array</returns> public static object[] MapToScriptType(object[] args, JsEngineMode engineMode) { return(args.Select(arg => MapToScriptType(arg, engineMode)).ToArray()); }
/// <summary> /// Makes a mapping of array items from the host type to a script type /// </summary> /// <param name="args">The source array</param> /// <param name="engineMode">JavaScript engine mode</param> /// <returns>The mapped array</returns> public static object[] MapToScriptType(object[] args, JsEngineMode engineMode) { return args.Select(arg => MapToScriptType(arg, engineMode)).ToArray(); }
/// <summary> /// Constructs an instance of the wrapper for type, that implements <see cref="IReflect"/> interface /// </summary> /// <param name="type">Target type</param> /// <param name="engineMode">JavaScript engine mode</param> public HostType(Type type, JsEngineMode engineMode) : base(type, null, engineMode, false) { }
/// <summary> /// Constructs instance of MSIE JavaScript engine /// </summary> /// <param name="engineMode">JavaScript engine mode</param> /// <exception cref="MsieJavaScriptEngine.JsEngineLoadException">Failed to load a JavaScript engine.</exception> /// <exception cref="System.NotSupportedException">Selected mode of JavaScript engine is not supported.</exception> public MsieJsEngine(JsEngineMode engineMode) : this(engineMode, false) { }
/// <summary> /// Constructs instance of the Chakra JsRT JavaScript engine /// </summary> /// <param name="engineMode">JavaScript engine mode</param> /// <param name="enableDebugging">Flag for whether to enable script debugging features</param> protected ChakraJsRtJsEngineBase(JsEngineMode engineMode, bool enableDebugging) { _engineMode = engineMode; _engineModeName = JsEngineModeHelpers.GetModeName(engineMode); _enableDebugging = enableDebugging; }
/// <summary> /// Constructs instance of MSIE JavaScript engine /// </summary> /// <param name="engineMode">JavaScript engine mode</param> /// <param name="useEcmaScript5Polyfill">Flag for whether to use the ECMAScript 5 Polyfill</param> /// <exception cref="MsieJavaScriptEngine.JsEngineLoadException">Failed to load a JavaScript engine.</exception> /// <exception cref="System.NotSupportedException">Selected mode of JavaScript engine is not supported.</exception> public MsieJsEngine(JsEngineMode engineMode, bool useEcmaScript5Polyfill) : this(engineMode, useEcmaScript5Polyfill, false) { }
/// <summary> /// Constructs an instance of the inner JS engine /// </summary> /// <param name="engineMode">JS engine mode</param> protected InnerJsEngineBase(JsEngineMode engineMode) { _engineMode = engineMode; _engineModeName = JsEngineModeHelpers.GetModeName(engineMode); }