3

首先,我尝试从WebBrowserControl运行

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" });

它工作得几乎完美。它知道 a window, alertis... 唯一的问题是它显然是在 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... 是什么。除非我告诉它设置上下文参数。

那里还有什么?我可以尝试一些无头浏览器并调用 usingProcess吗?

4

2 回答 2

2

如果你想在服务器端运行 JavaScript,我建议使用PhantomJS。它允许您使用 JavaScript 和命令行参数从命令行运行完整的 WebKit 浏览器。

于 2013-07-11T18:52:37.930 回答
2

JavaScript 绝对不再只是用于客户端脚本。正如 Cameron 所说,如果您需要 DOM,PhantomJS 非常棒。如果您不这样做,那么NodeJS是拥有大量库的明智选择。

于 2013-07-11T20:33:16.257 回答