/// <inheritdoc /> public void RunScript(string name, object @this, string script, IJsModule module) { var jsThis = JsValue.FromObject(_engine, @this); var jsScript = $"(function(module) {{ {script} }})"; var fn = _engine.Execute(jsScript, new ParserOptions { Source = name }).GetCompletionValue(); try { _engine.Invoke(fn, jsThis, new object[] { ((JsModule)module).Module }); } catch (JavaScriptException jsError) { Log.Warning("Scripting", "[{0}:{1}] {2}", name, jsError.LineNumber, jsError.Message); } }
/// <summary> /// Executes JavaScript in the context of the <c>@this</c> parameter, and allow exporting /// to a specific <see cref="IJsModule"/>. /// </summary> /// <param name="name"></param> /// <param name="this"></param> /// <param name="script">The script to run</param> /// <param name="module">The module to export any inner properties to.</param> /// <param name="@this">The context of execution.</param> public void RunScript(string name, object @this, string script, IJsModule module) { _scope.Run(() => { try { var fnScript = $"(function(module) {{ {script} }});"; var fn = JavaScriptContext.RunScript(fnScript); var jsObject = _interop.ToJsObject(@this, @this.GetType()); fn.CallFunction(jsObject, ((JsModule)module).Module.Object); } catch (JavaScriptScriptException e) { var error = e.Error; var message = error.GetProperty(JavaScriptPropertyId.FromString("message")).ToString(); throw new Exception(message); } }); }