diff --git a/include/jsuno/jsuno.hxx b/include/jsuno/jsuno.hxx index 7bcb99b50247..65276d1952a0 100644 --- a/include/jsuno/jsuno.hxx +++ b/include/jsuno/jsuno.hxx @@ -14,13 +14,28 @@ #include #include +#include + +#include +#include + +namespace com::sun::star::uno +{ +class XInterface; +} + namespace jsuno { +typedef std::span>> VariableList; + // @return JSON-stringified result (empty string for a value that JSON.stringify drops: `undefined`, // a function, or a symbol) // +// @param aGlobalVariables A list of variables to define in the global scope in the script. +// // @throws css.script.provider.ScriptExceptionRaisedException -LO_DLLPUBLIC_JSUNO OUString execute(OUString const& script); +LO_DLLPUBLIC_JSUNO OUString execute(OUString const& script, + VariableList aGlobalVariables = VariableList()); } /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/jsuno/source/jsuno.cxx b/jsuno/source/jsuno.cxx index b7e9648a96a8..8b8119269ea8 100644 --- a/jsuno/source/jsuno.cxx +++ b/jsuno/source/jsuno.cxx @@ -2488,7 +2488,7 @@ ExceptionData extractExceptionData(JSContext* ctx, ValueRef const& err) } } -OUString jsuno::execute(OUString const& script) +OUString jsuno::execute(OUString const& script, VariableList aGlobalVariables) { auto const rt = JS_NewRuntime(); JS_SetRuntimeOpaque(rt, new RuntimeData(rt)); @@ -2604,6 +2604,10 @@ OUString jsuno::execute(OUString const& script) JS_SetPropertyStr(ctx, uno, "componentContext", wrapUnoObject(ctx, comphelper::getProcessComponentContext())); JS_SetPropertyStr(ctx, global, "uno", uno.release()); + + for (const auto& rVariable : aGlobalVariables) + JS_SetPropertyStr(ctx, global, rVariable.first, wrapUnoObject(ctx, rVariable.second)); + auto const input = script.toUtf8(); ValueRef const evalRes( ctx, JS_Eval(ctx, input.getStr(), input.getLength(), "", JS_EVAL_TYPE_GLOBAL));