用C#运行Javascript最可靠的方法
Most reliable way to run Javascript in C#?
首先我尝试从WebBrowser
控制运行
WebBrowser webBrowser1 = new WebBrowser();
webBrowser1.Visible = false;
webBrowser1.Navigate("about:blank");
webBrowser1.Document.Write("<html><head></head><body></body></html>");
HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
dynamic scriptEl = webBrowser1.Document.CreateElement("script");
scriptEl.DomElement.text = "function test(fn) { try{ window[fn](); } catch(ex) { return 'abc '.trim(); } }"
+ "function sayHello() { alert('ha'); throw 'error with spaces '; }";
head.AppendChild(scriptEl);
var result = webBrowser1.Document.InvokeScript("test", new object[] { "sayHello" });
它几乎完美地工作。它知道window
、alert
是什么……唯一的问题是它显然在ECMA3上运行,所以当我测试"abc ".trim()
时,它无法执行。
我的第二次尝试是Javascript.NET.
using (JavascriptContext context = new JavascriptContext())
{
// Setting external parameters for the context
//context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World ! ");
// Script
string script = @"
alert(message.trim());
";
// Running the script
context.Run(script);
}
不幸的是,它不知道alert
、window
、document
、console
。。。是。除非我告诉它设置上下文参数。
还有什么?我可以尝试一些无头浏览器并使用Process
调用吗?
如果你想运行JavaScript服务器端,我建议你使用PhantomJS。它允许您使用JavaScript和命令行参数从命令行运行完整的WebKit浏览器。
JavaScript绝对不再只是用于客户端脚本。正如Cameron所说,如果您需要DOM,PhantomJS是非常棒的。如果你不这样做,NodeJS是一个拥有丰富库的明确选择。
相关文章:
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 使用c#在Web服务器上运行JavaScript方法
- strongloop script.js run find in before delete方法:如何同步运行异步方法
- 未能运行构造函数:TypeError:对象#<对象>没有方法'addPlugin'
- 有没有一种方法可以在服务器端页面加载之前在加载时运行javascript
- Chrome扩展:是否有一种方法可以运行JavaScript来获取页面上的内部html,并将其保存到扩展中的变量中
- javascript在html元素方法运行setTimeout后返回此消息
- 为什么可以't我从hamsters.js内部运行我的方法
- 如何从 MVC4 链接调用 Javascript 方法(错误 JavaScript 运行时错误:对象不支持此操作)
- 在客户端 Javascript 方法之后运行服务器方法
- 为什么 then() 链式方法不按顺序运行
- setInterval 只在对象方法上运行一次
- 运行时错误:对象不支持属性或方法
- JQuery .ajax() 函数调用不起作用,但成功方法运行
- 随着时间的推移,JavaScript 的 setInterval() 方法运行是否会消耗明显的处理能力
- javascript方法运行时显示loading.gif
- 将方法c#运行到javascript中