2012-04-21 44 views
4

我正在爲一個WebKit.NET替換一個.NET的WebBrowser,並且我在WebBrowser中使用的一個功能是我無法弄清楚如何在包裝我正在寫WebKit是從JavaScript和C#代碼傳遞DOM元素的能力。在C#和JavaScript之間傳遞元素

WebBrowser中,您只需撥打InvokeScript並傳遞HtmlElementDomElement屬性作爲參數,JavaScript函數將獲得該元素。同樣,您可以將JavaScript中的元素傳遞給C#,C#代碼將獲得一個DomElement對象。

WebKit據我所知我不能這樣做。 InvokeStriptMethod方法被破壞,但StringByEvaluatingJavaScriptFromString不是,它允許我將腳本注入當前文檔並在以後調用它們。

請注意,這些文檔不會是我自己創建的文檔,所以我不能做像給每個元素分配ID的東西。這是一個Web刮板,我需要儘可能避免與文檔元素混淆。

一個可能會工作的黑客是爲元素分配一個臨時ID並保留舊的ID備份,然後我可以通過JavaScript或C#調用GetElementById來獲取元素,然後重新分配舊元素的ID 。問題是當ID爲undefined時,WebKit的GetAttribute('id')會給我一個空字符串,所以我的C#代碼無法知道ID是空字符串還是undefined,誰知道當前網頁的腳本可以依賴由於某種原因,ID爲undefined,因此將ID設置爲空字符串可能會弄亂他們的javascript。

任何人有更好的主意或有任何其他WebKit我可以使用的方法?

+0

問題太模糊,添加的代碼示例。 – 2013-08-15 16:29:43

回答

0

你可以使用這個庫https://github.com/douglascrockford/JSON-js 並使用此代碼

var json_text = JSON.stringify(your_object, null, 2); 

現在你的對象是一個字符串 ,你可以做到這一點,讓您的字符串對象

var your_object = JSON.parse(json_text); 

你可以通過從javascript到c sharp的字符串。

在CSHARP可以使用fastjason和

var o = fastJSON.JSON.Instance.ToObject<List<Retclass>>(s); // return a generic list 

string str = fastJSON.JSON.Instance.ToJSON(obj, 
       new fastJSON.JSONParamters { EnableAnonymousTypes = true }); // using the parameters 

你可以做

,使用JSON

JSON(JavaScript對象符號)是一種輕量級的數據交換格式爲 。人類閱讀和寫作很容易。 機器很容易解析和生成。它基於1999年12月的標準ECMA-262第3版 - 的JavaScript編程語言 的子集。JSON是一種文本格式,完全獨立於語言 ,但使用C語言家族的程序員熟悉的約定,包括C,C++,C#,Java,JavaScript,Perl,Python和其他許多語言。這些屬性使JSON成爲一種理想的數據交換語言 。

http://www.json.org/

http://www.codeproject.com/Articles/159450/fastJSON

+0

這個答案太含糊。你將如何使用JSON來做到這一點? – 2013-08-10 00:16:21

+0

你可以用這個 – rodolfoprado 2013-08-12 12:38:52

+0

我猜這不是你的錯,這個問題太模糊了。 – 2013-08-15 16:30:10