/// <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 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 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 inner JS engine /// </summary> /// <param name="engineMode">JS engine mode</param> protected InnerJsEngineBase(JsEngineMode engineMode) { _engineMode = engineMode; _engineModeName = JsEngineModeHelpers.GetModeName(engineMode); }