Webview2(C++) 中的 ExecuteScript(document.getElementById('form') 返回 null 或一些 jQuery,如字符串 [duplicate]

ExecuteScript(document.getElementById('form') in Webview2(C++) return null or some jQuery like string [duplicate]

提问人:tex1138 提问时间:11/10/2023 最后编辑:273Ktex1138 更新时间:11/13/2023 访问量:35

问:

我使用 webview2 executeScipt 访问 DOM,但遇到了一些问题。

HTML 文档正在加载完成,然后调用下面的 C++ 代码。 只有 getElementById 函数不起作用,返回 null, 但是 outerHTML 很好。

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <div id="internalWrapper">
    <div id="container" class="lightTheme">
    <div id="form_header"></div>
    <div id="form" ctrltype="CT_FORM" class="formGrid" container="true"></div>
    <div id="form_footer"></div>
    </div>
    </div>  
</div>
</body>
</html>
webview->ExecuteScript(_T("document.documentElement.outerHTML", hCallback) // OK, return full html code 
webview->ExecuteScript(_T("document.getElementById('form')", hCallback)    // return null  

我将html文件更改为非常简单的html和 将 api 更改为 getElementByClassName() 但返回 null。

C++ getElementByID WebView2

评论

1赞 273K 11/10/2023
在页面准备就绪之前调用 ,因此在执行时它是 null。getElementById()
0赞 tex1138 11/13/2023
谢谢评论。但是如果文档还没有准备好,为什么documentElement.outerHTML可以得到完整的Html代码呢?
0赞 273K 11/13/2023
documentElement.outerHTML只获取一个文本,该文本尚未被 DOM 构建器处理。
0赞 tex1138 11/13/2023
不好意思。。你是什么意思 DOM 生成器仍在处理..意味着 Nativigation 没有完成?
0赞 tex1138 11/13/2023
documentElement.getElementById('form').outerHTML 运行良好。谢谢。

答: 暂无答案