【发布时间】:2012-04-21 19:58:30
【问题描述】:
我正在将 .NET 的 WebBrowser 替换为 WebKit.NET,并且我在 WebBrowser 中使用的功能之一是我无法弄清楚如何在我正在围绕WebKit 编写的包装器能够在 JavaScript 和 C# 代码之间传递 DOM 元素。
在WebBrowser 中,您只需调用InvokeScript 并将HtmlElement 的DomElement 属性作为参数传递,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