在C#中运行Javascript的最可靠方法?

首先,我尝试从WebBrowser Control开始

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

它几乎完美地工作.它知道什么是窗口,警报是…唯一的问题是它显然在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);
}

不幸的是,它不知道什么是警报,窗口,文档,控制台….除非我告诉它设置上下文参数.

那里还有什么?我可以尝试一些无头的浏览器并使用Process进行调用吗?

解决方法:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐