Javascript 在.NET中使用WebBrowser,可以使用突变观察者来观察DIV的变化吗?

Javascript 在.NET中使用WebBrowser,可以使用突变观察者来观察DIV的变化吗?,javascript,vb.net,mutation-observers,Javascript,Vb.net,Mutation Observers,我使用的是vb.NET,但我在这里合并了一个C#示例,使用addEventListener和DOMSubtreeModified来查看整个DOM文档: Dim script As HtmlElement = Me.Browser.Document.CreateElement("script") script.InnerHtml = "function listenToDOM() { document.addEventListener('DOMSubt

我使用的是vb.NET,但我在这里合并了一个C#示例,使用addEventListener和DOMSubtreeModified来查看整个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")
…然而,我正试图把它整理成更具体的部门。我还没有在这方面取得成功,但我读得越多,似乎就越应该使用一个我一无所知的变种观察者,尤其是我不知道如何与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-loaded事件中)

因此,在我的表单中,我运行CreateObserver('QueryForMyDivClassorTheIdentifier'),然后observer用一个mutation.type触发我的.NET函数DIVUpdated()。在我的例子中,我正在寻找对所包含文本的characterData更改


我仍然应该添加一个observer.disconnect(),但老实说,这并不重要,因为在我的例子中,我希望在整个会话过程中都能看到它。但是我想如果我用CreateObserver函数返回observer对象,我可以用.net作为对象保存变量,然后在我确实想断开()连接时使用它。

MutationObserver在DOM4中实现,所以Internet Explorer 11(两个版本)。您需要IE11兼容模式来初始化函数(如
[Observer]=new MutationObserver(函数(MutationRecords,MutationObserver){…};[Observer].Observer(目标,{…});
。首先尝试设置兼容模式,应用以下内容:
domsubtreemedited
突变事件已被弃用。我的意思是,如果您指的是WinForms/WPF WebBrowser控件,则WebView2当前(几乎)可用,但您必须等到一个.Net完成。在您发表评论之前,我还没有阅读过5.0或Webview2。值得注意的是,谢谢。不幸的是,我不太熟悉脚本,无法轻松应用您的代码注释,但我会深入研究。也许这比看起来更简单。。。