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