Html可以包含嵌入其中的少量Javascript(例如,在onclick
事件处理程序中定义)。
如果我使用像C#这样的dotNet语言编写Html浏览器,我可以使用哪些技术或API来运行这样的Javascript片段,因为我直到运行时才收到它(并将其作为字符串数据,而不是可执行代码)?
如果要运行的代码是C#片段而不是Javascript,是否更容易或更难?
是否有任何技术不需要我的代码具有不寻常的特权?例如,像CodeCompiler.FromSource
这样的方法需要SecurityPermissionFlag.UnmanagedCode
(这对我来说太过分了:我不明白为什么编译代码的风险很大。)
如果我控制服务器端和客户端代码,我也可以考虑在服务器上而不是在客户端上编译这样的脚本片段,然后将它作为预编译代码发送到客户端被执行。有没有办法通过网络向客户端发送此类代码(大概是dotNet程序集),客户端代码将其从网络接收到客户端RAM,并在客户端上调用它而不用< / em>将其作为文件存储在客户端磁盘驱动器上?
修改
我已经回答了前三个问题:我已经让自己认识到编译需要高权限。我不明白为什么;也许(虽然我认为这不是一个非常有说服力的理由),这是因为编译器是使用非托管代码实现的。也许这会在使用托管代码重新实现编译器时发生变化,可能是“C#版本5”时间帧。在任何情况下,无论什么原因,这似乎是它的方式,并没有解决方法(其他类似的API,但需要较少的权限)。
我剩下的问题是如何将Assembly实例从一台机器转移到另一台机器。当我有时间时,我会发现不受信任的代码是否可以运行Assembly.Load(byte[] rawAssembly)
方法。
答案 0 :(得分:2)
服务器端Javascript是.NET平台支持的语言之一。当你需要在现有代码中插入小代码片段时,我在scenrios中多次使用它。运行时它可以从数据库加载并编译,因此没有性能损失。
从使管道工作(检索源,编译它等)的观点来看,没有区别。使用强类型语言虽然将代码片段组装成可编译的编译单元要困难得多。
权限绝对是一项挑战。我不确定你提到的具体许可,但安全性是一个问题,在你编译的所有源代码都可以是任何东西之后如果你不小心你的代码来源它可以成为你系统的后门
这个问题的答案当然是 - 是的。你可以从任何地方加载程序集,不一定是从文件加载,也可以在内存中编译 - 这就是我的工作。在这种情况下没有dll文件。
答案 1 :(得分:1)
你问了几个问题,所以我会给你一个关于其中一个问题的想法。 有一篇非常好的文章和一些代码样本来自: http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm 其中讨论了在运行时编译和执行C#代码。我发现它非常有用,我在标准的c#应用程序中使用它。似乎它也适用于您的问题。