2013-04-17 2 views
3
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 с требуемыми параметрамиПолучение объекта нуль для iframe.contentDocument Iframe, созданный с помощью IFRAME 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. Что мне делать, чтобы получить html-объект для iframe в jsdom?

ответ

0

Ваш код делает то, что вы хотите, но вы можете попытаться добавить iframe до того, как ваш документ завершит загрузку. Добавить JavaScript в конце вашего <body> тега, и он работает:

<!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 с этим кодом.

Смежные вопросы