javascript - 向 Jint 公开特定 namespace

标签 javascript .net namespaces jint

我希望允许在 Jint 中运行的脚本访问我设置为命名空间的预先存在的 API。我的意思是我有一个包含 API 的命名空间,包括其他命名空间。我不想允许脚本访问其余代码 - 包括 .Net 框架。

我已经在 J​​int 论坛上发布了此内容:http://jint.codeplex.com/discussions/310772 不过,无意对他们不敬,但论坛似乎不太活跃,我希望能够尽快回答这个问题,所以我也在这里发帖。

不久前,ThomasMaierhofer 实现了与此类似的东西,我可能可以修改它来解决这个问题:http://jint.codeplex.com/discussions/211291

对于我缺乏经验的大脑来说,这似乎是向引擎公开 API 的一种非常巧妙的方式,但我以前从未见过这样做。

所以我的问题是:这可行吗?如果是这样,为什么以前没有这样做过?有没有什么方法可以在不修改 Jint 源代码的情况下实现这一目标,以便我可以在新版本可用时轻松更新 Jint .dll?

编辑: 我当前的 API 由多个类组成,每个类都有多个函数。我可以使用 SetParameter 绝对好地公开这些类的特定实例。 Jint 还有一个AllowClr 属性,允许脚本通过完全限定命名空间来访问CLR。这是他们给出的示例代码,演示了如果将其设置为 false 会发生什么。 来源:http://jint.codeplex.com/wikipage?title=Using%20.NET%20classes%20from%20scripts

string stringBuilder = @"
    var sb = new System.Text.StringBuilder();
    return sb.ToString();
    ";
var engine = new JintEngine();
engine.AllowClr = false;
engine.Run(stringBuilder); // throws a SecurityException

我想允许这样做,但仅针对特定 namespace ,而不是其他所有内容。我希望这能让问题更清楚。

感谢您的帮助,

山姆。

附注我正在 VB.Net 中工作,但涉及 C# 的答案很好。

最佳答案

Jint 基本上有两种方法来实现你想要的:SetParameter,你可以传递一个对象实例,通过使用你决定的名称访问它,可以从解释器调用该实例,以及 SetFunction(),让引擎直接调用托管代码中的函数。如果您想通过某种约定以编程方式公开大量对象,您可以使用反射,并且我认为这将满足您的要求而无需修改 jint 代码。

关于javascript - 向 Jint 公开特定 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9277433/

相关文章:

c# - 从系统中获取注销事件

javascript - YouTube 视频无法加载播放列表

javascript - async.filter 在所有迭代器完成之前调用回调

javascript - AngularJS Material Design 代码可以在 Chrome 中运行,但不能在 Firefox 中运行

.net - 如何识别程序集加载在哪个框架中?

namespaces - Tcl 错误 : command already exists in namespace "::"

javascript - AngularJS:使用来自维基百科 API 的 Web 服务

c# - 为什么简单的 List<T> 似乎比 ArrayList 慢?

C++ "Importing"来自另一个 C++ 文件的枚举类

c++ - 调试 'anonymous namespaces' (C++) 中的数据