4

我正在为 .NET 替换 .NET WebBrowserWebKit.NET而我一直在使用的功能之一是WebBrowser我无法弄清楚如何在我正在编写的包装器中实现WebKit的功能是传递 DOM JavaScript 和 C# 代码之间的元素。

在 a 中WebBrowser,您只需调用InvokeScript并传递 an 的DomElement属性HtmlElement作为参数,JavaScript 函数就会获取该元素。同样,您可以将一个元素从 JavaScript 传递给 C#,然后 C# 代码将获得一个DomElement对象。

WebKit我所知,我不能这样做。该InvokeStriptMethod方法已损坏,但StringByEvaluatingJavaScriptFromString不是,这让我可以将脚本注入当前文档并在以后随时调用它们。

请注意,这些文档不会是我自己创建的文档,所以我不能做诸如为每个元素分配 ID 之类的事情。这是一个网络爬虫,我需要尽可能避免弄乱文档的元素。

一种可能可行的技巧是为元素分配一个临时 ID 并备份旧 ID,然后我可以GetElementById从 JavaScript 或 C# 调用以获取元素,然后重新分配旧元素的 ID。问题是GetAttribute('id')当 ID 为 时,WebKit 会给我一个空字符串undefined,所以我的 C# 代码无法知道 ID 是空字符串还是undefined,谁知道,当前网页的脚本可能依赖于 ID出于某种原因undefined,因此将 ID 设置为空字符串可能会弄乱他们的 javascript。

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

4

1 回答 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 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 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

于 2013-08-09T19:44:30.320 回答