使用带有必需选项的jsdom为iframe.contentDocument iframe创建iframe的对象为null

时间:2013-04-17 07:53:50

标签: javascript iframe jsdom

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
    };

我为contentDocument获取null。我该怎么做才能在jsdom中获取iframe的html对象?

1 个答案:

答案 0 :(得分:0)

您的代码执行了您希望它执行的操作,但您可能会尝试在文档完成加载之前添加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>

以下是包含此代码的jsFiddle