2015-07-14 4 views
0

Я пытаюсь получить документ iframe после установки iframe.src. Я звоню в phantom-node. Функция возвращает error когда IFrame пуст:Получить объект документа IFrame в PhantomJS?

fetchGuestbookEntries: function() { 

    var getGuestbookForPage = function (doc) { 
     var result = []; 
     var rows = doc.querySelectorAll('td[class="guestbook"]'); 
     var date = ""; 
     var entry = ""; 
     for (var i = 0; i < rows.length; i++) { 
      date = i % 2 == 0 ? rows[i].innerText : date; 
      entry = i % 2 != 0 ? rows[i].innerText : entry; 
      if (date && entry) { 
       var info = date.split('\n').map(function (elem) { 
        return elem.replace('\n', '').trim(); 
       }); 
       result.push(
        { 
         info: { 
          guestname: info[0], 
          date: new Date(info[3]).toISOString().slice(0, 10), 
          time: info[4].replace(/Uhr|h/gi, '').trim() 
         }, 
         entry: entry.trim() 
        } 
       ); 
       date = ""; 
       entry = ""; 
      } 
     } 
     return result; 
    }; 

    var getPaginationSize = function() { 
     return document.querySelector('td[class="guestbook_navijump"]') ? 
      document.querySelector('td[class="guestbook_navijump"]').querySelectorAll('a').length : 0; 
    }; 

    var getIframeDoc = function(ifrm) { 
     return ifrm.document || 
      ifrm.contentDocument || 
      ifrm.contentWindow.document; 
    }; 

    var pagination = getPaginationSize(); 
    var entries = []; 
    for (var i = 0; i <= pagination; i++) { 
     var paginationPageUrl = window.location.href + "?jump=" + i; 
     var iframe = document.createElement('iframe'); 
     iframe.src = paginationPageUrl; 
     var doc = getIframeDoc(iframe); 
     entries.push(getGuestbookForPage(doc)); 
    } 
    return entries; 
} 

Есть ли способ, чтобы получить этот документ?

Ошибка:

Uncaught TypeError: Cannot read property 'document' of null 
at <anonymous>:2:21 
at Object.InjectedScript._evaluateOn (<anonymous>:895:140) 
at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34) 
at Object.InjectedScript.evaluate (<anonymous>:694:21) 

Я обычно открыть страницу в PhantomJS.

+0

Просьба предоставить полную и минимальный пример кода. –

+0

Хорошо, я добавил часть кода, где я хочу использовать iframe. –

+0

Поскольку вы используете мост, попробовали ли вы запустить PhantomJS с параметром командной строки '--web-security = false'? [Пример 1] (http://stackoverflow.com/a/29773659), [Пример 2] (http://stackoverflow.com/a/25260315) –

ответ

0

Вы должны быть в состоянии получить его с этим

document.getElementById('myframe').contentWindow.document 
+0

Я думаю, что это то, что я пробовал с ** getIframeDoc (iframe) ** –

+0

Хмм. чтение других сообщений не представляется возможным, потому что вы не можете получить доступ к документу iframe с другим происхождением, поскольку он нарушает политику безопасности «того же происхождения» – Cynigo