gpt4 book ai didi

javascript - 在 .NET 中使用 WebBrowser,可以使用突变观察器来监视 DIV 更改吗?

转载 作者:行者123 更新时间:2023-12-04 09:33:03 25 4
gpt4 key购买 nike

我正在使用 vb.NET,但我使用 addEventListener 和 DOMSubtreeModified 从这里合并了一个 C# 示例来观看整个 DOM 文档:

    Dim script As HtmlElement = Me.Browser.Document.CreateElement("script")
script.InnerHtml = "function listenToDOM() { document.addEventListener('DOMSubtreeModified', function(e) { window.external.DOMUpdate() }); }"
Me.Browser.Document.GetElementsByTagName("body")(0).AppendChild(script)
Me.Browser.Document.InvokeScript("listenToDOM")
...但是,我正在尝试将其整理为更具体的 DIV。我还没有在这方面取得成功,但我读得越多,似乎我应该使用一个我一无所知的 MutationObserver,尤其是我不知道如何与 WebBrowser 控件合并。
有没有人设法做到这一点?
注:是的,这是 WinForms WB,我确实已经将 BrowserEmulation 设置为 IE11,所以这应该不是问题。
更新:我尝试了一个实现,但它没有触发:
    Dim scriptEl As HtmlElement = Me.Browser.Document.CreateElement("script")
scriptEl.InnerHtml = "var targetNode = document.querySelector('.div-content');

var Config = {
attributes: true,
childList: true,
characterData: true,
subtree: true
};

function (as Observer = new MutationObserver(function (MutationRecords, MutationObserver) { window.external.DivUpdated(); });

Observer.observe(targetNode, Config);"

Me.Browser.Document.GetElementsByTagName("body")(0).AppendChild(scriptEl)

最佳答案

这是我想出的。当然,我将更多地开发它,了解正在捕获的特定变化......

Private Sub AddScript(Code As String)

Dim script As HtmlElement = Me.Browser.Document.CreateElement("script")
script.InnerHtml = Code
Me.Browser.Document.GetElementsByTagName("body")(0).AppendChild(script)

End Sub

Public Sub CreateObserver(theQuery As String)

Dim ScriptEl As String = "var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
window.external.DIVUpdated(mutation.type);
});
});

//everything
var observerConfig = {
attributes: true,
subtree: true,
childList: true,
characterData: true
};

var targetNode = document.querySelector('" & theQuery & "');
observer.observe(targetNode, observerConfig);"

AddScript(ScriptEl)

End Sub
我有多个脚本,所以我做了一个单独的子来添加每个脚本。并且因为没有立即加载 DIV,所以我不得不稍后添加它(而不是在 DOC 加载事件中)。
因此,从我的表单中,我运行 CreateObserver('QueryForMyDIVClassOrOtherIdentifier') 并且观察者用一个mutation.type 触发我的.NET 函数DIVUpdated()。在我的情况下,我正在寻找对所包含文本的 characterData 更改。
我仍然应该添加一个observer.disconnect(),但老实说它并不重要,因为在我的情况下,我希望在 session 的整个生命周期中观看它。但是我在想,如果我使用 CreateObserver 函数返回观察者对象,我可以将变量与我的 .net 作为对象保存在一起,然后在我确实想断开连接时使用它()。

关于javascript - 在 .NET 中使用 WebBrowser,可以使用突变观察器来监视 DIV 更改吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62736525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com