【问题标题】:Pass elements between C# and JavaScript在 C# 和 JavaScript 之间传递元素
【发布时间】:2012-04-21 19:58:30
【问题描述】:

我正在将 .NET 的 WebBrowser 替换为 WebKit.NET,并且我在 WebBrowser 中使用的功能之一是我无法弄清楚如何在我正在围绕WebKit 编写的包装器能够在 JavaScript 和 C# 代码之间传递 DOM 元素。

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

据我所知,在WebKit 中我无法做到这一点。 InvokeStriptMethod 方法已损坏,但 StringByEvaluatingJavaScriptFromString 未损坏,这让我可以将脚本注入当前文档并在以后随时调用它们。

请注意,这些文档不是我自己创建的文档,因此我无法执行诸如为每个元素分配 ID 之类的操作。这是一个网络爬虫,我需要尽可能避免弄乱文档的元素。

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

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

【问题讨论】:

  • 问题太模棱两可,加个代码例子。

标签: c# .net webkit webbrowser-control webkit.net


【解决方案1】:

你可以使用这个库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

【讨论】:

  • 这个答案太模棱两可了。你会如何使用 JSON 来做到这一点?
  • 我猜不是你的错,这个问题太模棱两可了。
  • 如果问题不是具体的,我不能具体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2013-07-23
  • 2011-12-03
  • 1970-01-01
相关资源
最近更新 更多