【问题标题】:Javascript Compiler in .Net giving errors.Net中的Javascript编译器给出错误
【发布时间】:2010-10-07 15:06:53
【问题描述】:

我有以下代码:

 Dim compiler As ICodeCompiler = New Microsoft.JScript.JScriptCodeProvider().CreateCompiler
      Dim params As New CompilerParameters
      params.GenerateInMemory = True

      Dim res As CompilerResults = compiler.CompileAssemblyFromSource(params, TextBox1.Text.Trim)
      Dim ass As Assembly = res.CompiledAssembly
      Dim instance As Object = Activator.CreateInstance(ass.GetType("Foo"))

      Dim thisMethod As MethodInfo = instance.GetType().GetMethod("FindProxyForURL")
      Dim str(1) As String
      str(0) = ""
      str(1) = ""

MessageBox.Show(thisMethod.Invoke(instance, str))

尝试编译以下 JavaScript 代码:

类 Foo {

    function FindProxyForURL(url, host) 
        {
            alert('Test')
            return "PROXY myproxy.local:8080";
        }
}

并且在 -

上出现错误
 compiler.CompileAssemblyFromSource(params, TextBox1.Text.Trim)

{C:\Users\Me\AppData\Local\Temp\zfwspah4.0.js(4,65) : 错误 JS1135: 变量 'alert' 有 未声明}

如果我删除“警报”行,它可以正常工作。 我认为这是因为 alert 是一个“窗口”对象,所以 .Net 无法识别它。我试过用 window.alert('') 替换它 但仍然得到同样的错误。

我该如何解决这个问题?

【问题讨论】:

  • 你建议如何执行你编译的javascript?我不相信有办法在网页中做到这一点,因此访问窗口对象、警报或其他方式是多余的。
  • 您需要将 Alert 函数的实现添加到已编译的程序集中。
  • “alert()”行不以“;”结尾。我认为这会导致编译失败,但这可能只是您发布中的复制粘贴错误,而不是根本原因。

标签: c# .net javascript vb.net compiler-construction


【解决方案1】:

alert 是一些主机环境提供的函数(例如,浏览器有它,但服务器可能没有)。从alert 更改为window.alert 没有任何区别,因为(在浏览器上)它涉及到同样的事情。 (window 是全局对象的属性,它指向全局对象。alert 是全局对象的属性,指向主机提供的函数。所以window.alert 与@ 相同987654327@ 和window.window.window.alert 一样。但是我跑题了……)

您必须使用(并且可能导入,或作为函数参数接收等)您将在其中运行已编译的 JavaScript 的主机环境提供的任何机制。

【讨论】:

    【解决方案2】:

    详细说明一下所说的内容。

    window 对象是 Web 浏览器域对象模型的一部分,严格来说,它不是一个 javascript 对象,而只是一个浏览器对象的 javascript 接口,如果你愿意,它是一个代理。因此,DOM 引用类型放弃了这一点,它特定于执行域,即它仅可用于 Web 浏览器中的 javascript 解释器,而不是为其提供 DOM。由于alertwindow 对象的一种方法,因此您在没有DOM 的情况下会陷入困境。

    正如 TJ 提到的,如果您想要一个可用于已编译的 javascript 应用程序的弹出警报窗口,那么您将不得不自己实现它,老实说,我不知道从哪里开始。这远远超出了这个问题的范围。

    【讨论】:

      猜你喜欢
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      相关资源
      最近更新 更多