2013-07-11 26 views
3

首先,我想從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" }); 

它的工作原理幾乎完美運行。它知道什麼是windowalert是......唯一的問題是它顯然運行在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); 
} 

不幸的是,不知道是什麼alertwindowdocumentconsole ......是。除非我告訴它設置上下文參數。

還有什麼?我可以嘗試一些無頭瀏覽器並使用Process來調用嗎?

+1

你想做什麼或者你最終想達到什麼目的?通常,Javascript是客戶端語言,並且不在服務器上執行。 –

+0

我只需要知道執行該函數是否會拋出異常。我的目標是完成這個http://i.imgur.com/ucJeuXe.jpg – BrunoLM

+0

我仍然困惑於爲什麼Javascript涉及到這一點。看起來像你試圖在Linq上創建單元測試? –

回答

2

如果你想運行JavaScript服務器端,我會建議使用PhantomJS。它允許您使用JavaScript和命令行參數從命令行運行完整的WebKit瀏覽器。

2

JavaScript絕對不僅僅適用於客戶端腳本。正如Cameron所說,如果您需要DOM,PhantomJS非常出色。如果你不這樣做,NodeJS是大量圖書館的明智選擇。

+0

-1沒有回答這個問題,它是關於從C#運行JavaScript,而不是運行JavaScript服務器端的問題。 –

相關問題