我正在为 .NET 替换 .NET WebBrowser,WebKit.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我可以使用其他任何方法吗?