/// <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 wrapper /// </summary> /// <param name="clsid">CLSID of script engine</param> /// <param name="languageVersion">Version of script language</param> public ActiveScriptWrapper(string clsid, ScriptLanguageVersion languageVersion) { _is64Bit = Utils.Is64BitProcess(); _pActiveScript = ComHelpers.CreateInstanceByClsid <IActiveScript>(clsid); if (_is64Bit) { _pActiveScriptParse64 = ComHelpers.QueryInterface <IActiveScriptParse64>(_pActiveScript); _pActiveScriptDebug64 = ComHelpers.QueryInterface <IActiveScriptDebug64>(_pActiveScript); } else { _pActiveScriptParse32 = ComHelpers.QueryInterface <IActiveScriptParse32>(_pActiveScript); _pActiveScriptDebug32 = ComHelpers.QueryInterface <IActiveScriptDebug32>(_pActiveScript); } _pActiveScriptGarbageCollector = ComHelpers.QueryInterfaceNoThrow <IActiveScriptGarbageCollector>(_pActiveScript); _activeScript = (IActiveScript)Marshal.GetObjectForIUnknown(_pActiveScript); if (_is64Bit) { _activeScriptParse64 = (IActiveScriptParse64)_activeScript; } else { _activeScriptParse32 = (IActiveScriptParse32)_activeScript; } _activeScriptGarbageCollector = _activeScript as IActiveScriptGarbageCollector; 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)); } } } }
/// <summary> /// Constructs instance of the ActiveScript JavaScript engine /// </summary> /// <param name="clsid">CLSID of JavaScript engine</param> /// <param name="engineModeName">Name of 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, string engineModeName, string lowerIeVersion, ScriptLanguageVersion languageVersion, bool useEcmaScript5Polyfill, bool useJson2Library) { _engineModeName = engineModeName; _pActiveScript = IntPtr.Zero; try { _pActiveScript = ComHelpers.CreateInstanceByClsid <IActiveScript>(clsid); _activeScript = (IActiveScript)Marshal.GetObjectForIUnknown(_pActiveScript); } catch (Exception e) { throw new JsEngineLoadException( string.Format(Strings.Runtime_JsEngineNotLoaded, _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(Strings.Runtime_ActiveScriptLanguageVersionSelectionFailed, languageVersion)); } } } _activeScriptSite = new ActiveScriptSiteWrapper(_pActiveScript, _activeScript); LoadResources(useEcmaScript5Polyfill, useJson2Library); }