2011-12-16 2 views
0

Используя iframe для отправки отправки, у него есть загрузка файла. все работает нормально вплоть до возвращаемого контента.iframe submit Получить размещенное содержимое

Если я показываю iframe на странице, я вижу html, который был возвращен из функции в моем iframe. Имея много проблем с получением содержимого iframe для замены содержимого страницы.

В основном получить содержимое тела iframe и поместить его в теги тела страницы. Я уверен, что его 1 или 2 строки, но каждый jquery или документ или getElementById идея, которую я нашел в Интернете, не работает.

Я замечаю что-то странное, если я пытаюсь использовать «console.info (« somemessage »)» в моей функции перезагрузки, он выдает сообщение об ошибке, поскольку консоль не существует. Не уверен, почему, но кажется, что мой javascript-фокус находится в iframe и не может видеть firebug.

Heres код, разделенный. Вернемся к тестированию события .load, которое работает. но это вторая строка, которая пытается написать содержание в тело. когда я прокомментирую это, iframe показывает, с моим контентом. Если я запустил его без комментирования, вся страница перезагрузится.

 if (isStarted == false) { 
      isStarted = true; 
      statustracker.start(); 
      //style="height:0px;width:0px;" 
      var iframe = $('<iframe name="postframe" id="postframe" class="hidden" />'); 
      $('div#iframe').append(iframe); 

      $('#ImportDetailForm').attr("target", "postframe") 
      form.submit(); 

      $("#postframe").load(function() { 
       iframeContents = $("iframe")[0].contentDocument.body.innerHTML; 
       $("body").html(iframeContents); // <--- the problem 
      }); 
     } 
+0

Все настройки формы (attr) указаны в тегах формы. Объект form является объектом в jquery validate submithandler. –

ответ

0

В вашей родительской странице (тот, содержащий IFRAME), вы можете установить приемник событий для «сообщений» событий, например, так:

window.addEventListener("message", receiveMessage, false); 
function receiveMessage(e) { ... } 

Затем в IFRAME, просто оставить сообщение в окно «родительской», как это:

parent.postMessage(someString, parentUrl); 

Поскольку сообщения являются строками, вам необходимо сериализовать любые данные, которые вы отправляете между IFrame и родительским окном - я предлагаю JSON! Поэтому в вашем случае сериализуйте возвращаемый HTML из запроса на загрузку и отправьте его родительскому, затем десериализуйте его на этой стороне и введите в DOM.

+0

Я не могу понять, как получить содержимое iframe сериализованным. пытаясь использовать jquerys/json .serialize(), но не работает. –

+0

Каким образом это не работает? Есть ли сообщение об ошибке? –

0

недопустимая или незаконная строка была указана «Код:» 12

вероятно потому, что iframeContents пуст.

  $("#postframe").load(function() { 
       var win = document.getElementById("postframe").contentWindow; 
       var parent_url = decodeURIComponent(document.location.hash.replace(/^#/, '')), link; 
       iframeContents = $("#postframe").find("body").contents().serialize(); //$("iframe")[0].contentDocument.body.innerHTML; 
       console.info(iframeContents); 
       //$(this).parent("body").html(iframeContents); 
       win.postMessage(iframeContents, parent_url, parent); 
      });