轉帖|其它|編輯:郝浩|2011-09-06 16:04:05.000|閱讀 542 次
概述:之前寫過一篇文章,是關于在.NET中,使用v8sharp作 為v8Engine的Wraper, 從而在.NET中與Javascript互操作。不過v8Sharp有幾個很大的問題,第一,在參數中傳遞中文字符串會產生亂碼。第二,無法在.NET 中,使用.NET對象作為參數傳遞給Javascript。這樣的話,v8Sharp的實用價值就降低了不少。好在v8Engine相當出色,有眾多 的.NET開源Wrapper,于是,找到了這款Javascript.NET,可擴展性相當強的Wrapper。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
之前寫過一篇文章,是關于在.NET中,使用v8sharp作 為v8Engine的Wraper, 從而在.NET中與Javascript互操作。不過v8Sharp有幾個很大的問題,第一,在參數中傳遞中文字符串會產生亂碼。第二,無法在.NET 中,使用.NET對象作為參數傳遞給Javascript。這樣的話,v8Sharp的實用價值就降低了不少。好在v8Engine相當出色,有眾多 的.NET開源Wrapper,于是,找到了這款Javascript.NET,可擴展性相當強的Wrapper。
v8Engine
v8Engine 是Google Chrome使用的JS解釋引擎, 其執行效率相當的高,根據我自己的測試,是高于IE8,FF3等瀏覽器所使用的JS引擎。目前的最新版本與 IE9,FF4的執行效率不相上下。而且Javascript本身是C Style的編程語言,對于我們這種長期使用C、C++和C#的開發人員來說,比LUA等腳本語言更具親和力。
Javascript.NET
之前提到了它 的可擴展性相當強,是因為它很簡單,無論是從源代碼來看,還是從使用上來看,都相當的簡單。自己僅需要簡單的包裝一下,即可實現大部分非常有用的功 能。 官方網站的入門指引只提到了它可以執行JS代碼,沒有提到如何執行JS定義的方法,實際上在調用它的Run方法時,JS代碼已經被編譯進了上下文, 如果把JS定義的方法預先編譯一次,即可在以后通過函數名稱直接調用JS方法。我恰好利用了這個特性對該類庫進行了一些簡單的包裝,實現了.NET與JS 的函數互調用。不過目前官方提供的最新版本存在一個Bug,在.NET中調用JS時(通過Run方法執行JS),會隨機出現“(Unknown Location)”異常,實際是因為Stack overflow引起的,我稍微修改了一下官方的源代碼,修正了這個問題,在后面提供的源代碼中,Noesis.Javascript.dll已經是修正 了該問題的編譯版本。如果需要Noesis.Javascript.dll的源代碼,請聯系我。
How to use
我僅僅對Javascript.NET進行了一個簡單的包裝,在源代碼中也提供了Example,這里就大概說明一下。
首先是配置文件,有如下幾個屬性:
JScriptManager.MappingComplete += (sender, e) =>
};
JS的一般調用方法:
function normalMethod(msg)
C#代碼:
string rtv = (string)JScriptManager.Call("normalMethod", msg);
傳遞.NET對象作為JS方法的參數:
function callDotNet(speaker)
C#代碼:
public class Speaker
JScriptManager.Call("callDotNet", new Speaker());
在JS中通過強命名方式實例化.NET對象(無需創建GAC映射):
function testCreateByFullName()
在JS中通過完全限定名+程序集名稱創建.NET對象(需要GAC映射):
function testCreateByShortName()
在JS中調用.NET靜態方法:
function testStaticMethod()
在源代碼中提供的Example分別包含了上述介紹的使用方法,最終運行的效果是在控制臺輸出兩句字符串,并啟動Windows自帶的計算器和默認的瀏覽器。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載