【问题标题】:Run javascript in C# WPF Form在 C# WPF 表单中运行 javascript
【发布时间】:2012-04-17 00:26:54
【问题描述】:

*请注意,这不适用于基于 Web 的应用程序,它是基于 Windows 的。

我正在构建一个应用程序,我需要用户提交将由应用程序运行的简单 javascript。

脚本将调用作为 c# 构建一部分的函数。

一个例子:

C#代码:

public void helloWorld()
{
    Debug.WriteLine("hello world");
}

用户提交的Javascript:

helloWorld();

应用程序会在运行时解析 JavaScript,然后在我的 C# 代码中调用所需的函数。

为什么?..

我的应用程序将由几乎没有编程经验的人使用,他们输入非常简单的 JavaScript,应用程序将尝试在用户计算机上自动执行一些任务。所以我使用 JavaScript 的原因是因为它很简单,对于没有经验的人来说很容易学习。

【问题讨论】:

标签: c# .net


【解决方案1】:

听起来您想要为您的应用程序添加一个 JavaScript 解析器。老实说,考虑到脚本的上下文和您的代码不同,我认为您正在做的事情是不可能的。然而,这个项目似乎正在做一些事情,可能会让你找到正确的地方:

http://javascriptdotnet.codeplex.com/

就个人而言,我认为制作某种 XML 格式会很有用(例如 UrlRewriter.net 如何使重写 URL 变得容易):

 <xml>
 <commands>
     <!-- Expose a Set of Condition Objects to Select From -->
     <if condition="YourApplication.Conditions.RightClickOnDesktop">
         <print text="HelloWorld" />
     </if>
 </commands>

【讨论】:

  • 使用 XML 是一个不错的选择,我没有考虑过,将进一步探索:)
  • 无论你是用类似 Javascript 的语法还是一些奇怪的 XML 符号来编写它都没有任何区别。 Javascript .NET 看起来很有希望。
【解决方案2】:

这是一个运行 javascript 代码的示例,该代码反过来调用 c# 方法

[System.Runtime.InteropServices.ComVisible(true)]
public class CSharpClass
{
    public void MsgBox(string s)
    {
        MessageBox.Show(s);
    }
}

-

Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));

dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "Javascript";
obj.AddObject("mywindow", new CSharpClass(), true);
var result = obj.Eval(
    @"
        function test(){
            mywindow.MsgBox('hello'); 
        }
        test();
    "
    );

【讨论】:

    【解决方案3】:

    为什么“需要用户提交简单的 javascripts”?您的应用程序是什么,用户需要它做什么?为什么你决定用脚本语言来做这件事?我并不是说这是错误的答案,而是你没有证明这个结论是正确的。

    如果您的应用程序将由“编程经验很少的人”使用,我不建议实施脚本语言。非程序员很难理解源代码和变量等基本概念。

    我建议首先研究用于用户脚本的宏录制。对于 .NET,有 UI AutomationWhite 自动化框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 2017-01-09
      相关资源
      最近更新 更多