Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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));
                    }
                }
            }
        }
Пример #3
0
        /// <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);
        }