在 Jint 中使用第三方 js 库
Using third party js libraries with Jint
我正在开发一项功能,其中需要在 ASP.Net 应用程序的上下文中在服务器端执行从数据库检索的用户定义的匿名 javascript 函数。
我正在为此目的评估 Jint(来自 NuGet 的最新版本)。我已经能够 运行 执行基本操作的函数和 return 值而没有出现如下问题。
public void Do()
{
var jint = new Engine();
var add = jint.Execute(@"var f = " + GetJsFunction()).GetValue("f");
var value = add.Invoke(5, 4);
Console.Write("Result: " + value);
}
private string GetJsFunction()
{
return "function (x,y) {" +
" return x+y;" +
"}";
}
我的问题是 Jint 是否促进了使用第三方库(如 lodash)的 javascript 函数的执行?如果是这样,我将如何让 Jint 引擎知道它(即第三方库)?
一个例子是执行以下函数。
private string GetFunction()
{
return "function (valueJson) { " +
" var value = JSON.parse(valueJson);" +
" var poi = _.find(value,{'Name' : 'Mike'});" +
" return poi; " +
"}";
}
非常感谢。
我想我已经弄明白了。这与执行自定义函数没有什么不同。您只需从文件(项目资源)中读取第三方库并在 Jint 引擎上调用执行。见下文;
private void ImportLibrary(Engine jint, string file)
{
const string prefix = "JintApp.Lib."; //Project location where libraries like lodash are located
var assembly = Assembly.GetExecutingAssembly();
var scriptPath = prefix + file; //file is the name of the library file
using (var stream = assembly.GetManifestResourceStream(scriptPath))
{
if (stream != null)
{
using (var sr = new StreamReader(stream))
{
var source = sr.ReadToEnd();
jint.Execute(source);
}
}
}
}
所有需要添加的第三方库我们都可以调用这个函数
我正在开发一项功能,其中需要在 ASP.Net 应用程序的上下文中在服务器端执行从数据库检索的用户定义的匿名 javascript 函数。
我正在为此目的评估 Jint(来自 NuGet 的最新版本)。我已经能够 运行 执行基本操作的函数和 return 值而没有出现如下问题。
public void Do()
{
var jint = new Engine();
var add = jint.Execute(@"var f = " + GetJsFunction()).GetValue("f");
var value = add.Invoke(5, 4);
Console.Write("Result: " + value);
}
private string GetJsFunction()
{
return "function (x,y) {" +
" return x+y;" +
"}";
}
我的问题是 Jint 是否促进了使用第三方库(如 lodash)的 javascript 函数的执行?如果是这样,我将如何让 Jint 引擎知道它(即第三方库)?
一个例子是执行以下函数。
private string GetFunction()
{
return "function (valueJson) { " +
" var value = JSON.parse(valueJson);" +
" var poi = _.find(value,{'Name' : 'Mike'});" +
" return poi; " +
"}";
}
非常感谢。
我想我已经弄明白了。这与执行自定义函数没有什么不同。您只需从文件(项目资源)中读取第三方库并在 Jint 引擎上调用执行。见下文;
private void ImportLibrary(Engine jint, string file)
{
const string prefix = "JintApp.Lib."; //Project location where libraries like lodash are located
var assembly = Assembly.GetExecutingAssembly();
var scriptPath = prefix + file; //file is the name of the library file
using (var stream = assembly.GetManifestResourceStream(scriptPath))
{
if (stream != null)
{
using (var sr = new StreamReader(stream))
{
var source = sr.ReadToEnd();
jint.Execute(source);
}
}
}
}
所有需要添加的第三方库我们都可以调用这个函数