【问题标题】:Run javascript in C#在 C# 中运行 javascript
【发布时间】:2009-11-08 23:29:20
【问题描述】:

我在greasemonkey 脚本中发现了一个相当复杂的函数,我想在我的C# 应用程序中使用它。基本上我正在解析一个页面,我需要收集var avar = {}; 的全部或4 个成员(我还没有这样做,但它们都是使用var avar.name = "val" 的字符串)

然后我需要调用 gm 函数,它返回一个字符串并接收 3 个字符串。如何在 C# 中调用该函数?我正在使用 .NET 3.5

【问题讨论】:

  • 呃... Greasemonkey 是一个浏览器插件。这与 .NET 和 C# 有什么关系?我不太明白。

标签: c# .net javascript


【解决方案1】:

我假设您在服务器端或其他一些处理 HTML 数据的独立应用程序中进行了一些代码重用。

您可以使用 Microsoft.JScript.JScriptCodeProvider 类在 .net 中编译(至少一部分)JavaScript —— 尽管请注意该类会发出警告

此 API 支持 .NET Framework 基础设施,并不打算 直接从您的代码中使用。

一旦编译生成的程序集(由提供给提供程序的CompilerParameters 指定)应该可以动态加载。建议使用 Reflector 之类的工具检查生成的程序集,以查看您实际生成的程序集(就类和命名空间而言)。

免责声明 -- 我只在CSharpCodeProvider 作用于 C# 源代码时使用过这种技术,但我希望这种类型的 .net 语言之间存在合理的兼容性的东西。

编辑 -- 有关从 C# 编译 JavaScript 的示例,请参阅 this blog post on Verifying JavaScript syntax using C#

【讨论】:

    【解决方案2】:

    首先,您可能想确切地考虑为什么要尝试这样做。是不是要在 C# 中使用 JS 中的算法?如果是这样,请继续。如果您想在客户端代码(即浏览器)中使用 C#,请转而研究 Silverlight。

    其次,我不确定您尝试做的事情是否真的可行。根据您要实现的目标,您最好将 Javascript 从 Greasemonkey 应用程序翻译成 C# 3.5(假设脚本的许可条件允许),以便在您的应用程序中使用。

    翻译应该不会很困难 - C# 在最近几个版本中越来越像 JS。请注意“var”关键字;它在 C# 中的含义与在 JS 中的含义略有不同(对比 C# 中的“类型推断”与 JS 中的“动态类型”)。

    当然,在完成此操作后维护这两个版本的代码会很棘手且很痛苦。如果可以的话,我建议保留 1 个权威版本的代码。

    祝你好运!

    【讨论】:

      【解决方案3】:

      您能否提供有关您的脚本以及您想要完成的任务的更多信息?大多数 Greasemonkey 脚本通过 use Javascript 与 DOM 交互。您可以在 C# 中运行 Javascript,但 DOM 将对您可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-14
        相关资源
        最近更新 更多