首先,我想從WebBrowser
Control在C#中運行Javascript的最可靠的方法?
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是客戶端語言,並且不在服務器上執行。 –
我只需要知道執行該函數是否會拋出異常。我的目標是完成這個http://i.imgur.com/ucJeuXe.jpg – BrunoLM
我仍然困惑於爲什麼Javascript涉及到這一點。看起來像你試圖在Linq上創建單元測試? –