在C#和JavaScript之间传递元素

4
我正在将一个 .NET 的 WebBrowser 替换为 WebKit.NET,其中一个功能是在 WebBrowser 中使用的,但我无法想出如何在我编写的 WebKit 包装器中实现,即从 JavaScript 和 C# 代码中传递 DOM 元素的能力。
WebBrowser 中,您只需调用 InvokeScript 并将 HtmlElementDomElement 属性作为参数传递,JavaScript 函数将获得该元素。同样地,您可以将元素从 JavaScript 传递到 C#,C# 代码将获得一个 DomElement 对象。
据我所知,在WebKit中,我无法做到这一点。InvokeStriptMethod方法已经失效了,但是StringByEvaluatingJavaScriptFromString没有失效,这使我可以将脚本注入当前文档,并在以后的任何时候调用它们。
请注意,这些文档不会是我自己创建的文档,因此我不能像为每个元素分配ID那样做。这是一个网络爬虫,我需要尽可能地避免干扰文档的元素。
一个可能有效的hack是为元素分配一个临时ID并备份旧ID,然后我可以从JavaScript或C#中进行GetElementById调用来获取元素,然后重新分配旧元素的ID。问题是,当ID为undefined时,WebKit的GetAttribute('id')将给我一个空字符串,因此我的C#代码无法知道ID是一个空字符串还是undefined,而且谁知道,当前网页的脚本可能依赖于ID为undefined的某些原因,因此将ID设置为空字符串可能会破坏他们的javascript。

有没有更好的想法或者其他我可以使用的WebKit方法?


问题过于模糊,请添加代码示例。 - Marcel Valdez Orozco
1个回答

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#。
在C#中,您可以使用FastJSON。
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 Object Notation) 是一种轻量级的数据交换格式。它易于人类读写,也方便机器解析和生成。它基于JavaScript编程语言的一个子集,ECMA-262第3版 - 1999年12月标准。JSON是一种文本格式,完全独立于语言,但使用了C系列语言程序员熟悉的约定,包括C、C++、C#、Java、JavaScript、Perl、Python和许多其他语言。这些属性使JSON成为一种理想的数据交换语言。

http://www.json.org/

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


这个答案太模糊了。你会如何使用JSON来实现? - Marcel Valdez Orozco
我猜这不是你的错,问题太模糊了。 - Marcel Valdez Orozco
如果问题不具体,我无法给出具体的答案。 - rodolfoprado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接