【发布时间】: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