为iframe获取对象null.使用jsdom和所需选项创建iframe

Getting object null for iframe.contentDocument iframe created iframe using jsdom with required options

本文关键字:iframe 创建 选项 使用 获取 取对象 null jsdom      更新时间:2023-09-26
var elementFrame = window.document.createElement('iframe');
    elementFrame.style.display = 'none';
    elementFrame = window.document.body.insertBefore(elementFrame, null);
if (elementFrame.contentDocument) {
    element = elementFrame.contentDocument;
} else if (element.contentWindow) {
    element = elementFrame.contentWindow.document;
}
console.log("Element **********" + element);

我正在使用带有所需参数的jsdom

var path = require("path");
    global.jsdom = require("jsdom");
    global.jsdom.defaultDocumentFeatures = {
        ProcessExternalResources: true,
        ProcessExternalResources : ['script', 'frame', 'iframe'],
        FetchExternalResources : ['script','img','css','frame','iframe','link'],
        MutationEvents: true,
        QuerySelector : true
    };

我得到null的contentDocument。我应该怎么做,以获得html对象的iframe在jsdom?

您的代码完成了您想要它做的事情,但是您可能试图在文档完成加载之前添加iframe。在<body>标签的末尾添加javascript,它就可以工作了:

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
    <body>
        <script>
            var elementFrame = window.document.createElement('iframe'); 
            elementFrame.style.display = 'none'; 
            elementFrame = window.document.body.insertBefore(elementFrame, null);
        if (elementFrame.contentDocument) {
            element = elementFrame.contentDocument;
        } else if (element.contentWindow) {
            element = elementFrame.contentWindow.document;
        }
        console.log("Element **********" + element);
        </script>
    </body>
</html>