2013-11-18 3 views
0

На моей индексной странице среди нескольких разных divs есть один iframe с id = 'myframe', который iframe имеет src = order.html, и на этой странице есть куча разных переключателей и флажков со значениями, связанными с ними.Как отредактировать innerHTML страницы индекса из iframe с помощью Javascript?

В настоящее время я нахожусь в стене, записывая функцию javascript для редактирования div (с id = 'purchase') на индексной странице этого сайта для отображения текущих заказов/покупок.

function addAlbum(boxElement){ 


      var iframe = document.getElementById('myframe'); 

      var s = iframe.contentWindow.document.getElementById('purchase').innerHTML; 

      i = boxElement.value.indexOf("|"); 
      clean_string = boxElement.value.substring(0,i); 
      //price = parseInt(boxElement.value.substring(i +1, boxElement.value.length)); 
      replaceString = ""; 

      if(boxElement.checked){ 

       s += '<div class="one_record">'; 
       s += clean_string; 
       s += '</div>'; 
      } 
      else{ 
       replaceString = '<div class="one_record">'; 
       replaceString += clean_string; 
       replaceString += '</div>'; 

       s.replace(replaceString, ""); 

      } 

     } 

Когда я запускаю свою функцию, я получаю сообщение об ошибке, говоря: «Не удается прочитать свойство„contentWindow“нуль» означает, что не могу найти свой IFRAME (ID = «myframe»). Любые советы наиболее ценятся.

+0

Я думаю, что проблема может заключаться в том, что iFrame уже является «оконным» объектом, поэтому вы можете подумать о том, чтобы изменить contentWindow на contentDocument и посмотреть, устраняет ли это вашу проблему. Вы можете попробовать получить доступ к объекту документа вашего iFrame с чем-то вроде: var iframe = window.frames ["myframe"]; var s = iframe.document.getElementById ('покупка'). InnerHTML; – d3v1lman1337

+0

Я обновил свой ответ раньше, я думаю, что на самом деле я нашел ошибку, с которой вы столкнулись. – Idra

ответ

0

В прошлом я обнаружил, что вы не можете редактировать содержимое фрейма при захвате его через ID с document.getElementById() вам нужно пройти через window.frames т.е. window.frames.iFrameName.document.body.innerHTML.

Вы должны быть в состоянии получить доступ к документу в IFrame как это (с вами более или менее есть):

var frame = document.getElementById('frame'); 
frame.onload = function() { 
    var frameDoc = frame.contentDocument ? frame.contentDocument : frame.contentWindow.document; 
    frameDoc.body.innerHTML += '<br />Appended from the parent Page'; 
} 

После исправления моего собственного невежества по этому вопросу я повнимательнее взглянуть на то, что происходит самостоятельно с ваш код ничего особо не выделялся. Фактически сначала у меня были проблемы с репликацией проблемы, потому что ваш код действительно работал для меня. Обычно это означает, что iFrame не загружен.

Итак, я пробовал это, и единственными ошибками, которые я получал, было то, что внутреннийHTML элемента iFrame getElementById('purchase') был NULL, а не contentWindow.

И после этого он ударил меня, вы вызываете функцию addAlbum(boxElement) до того, как iframe существует в DOM. С этой HTML я получил ту же самую ошибку в IE:

<html> 
<head></head> 
<body> 
    <script type="text/javascript"> 

    var frame = document.getElementById('frame'); 
    (function() { 
     var s = frame.contentWindow.document.getElementById('s1').innerHTML; 
      s += '<br />Appended from the parent Page'; 
    })(); 

    </script> 
    <iframe id="frame" src="internal.htm"></iframe> 
</body> 
</html> 

Обратите внимание, как и сценарий, и IFrame находятся в теле и IFrame находится ниже сценария. Я готов поспорить, что у вас есть аналоговая ситуация, потому что ничто иное не вызвало такой четкой ошибки. К сожалению, я не могу точно определить вашу ошибку, не видя ваш HTML.

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