2011-12-16 7 views
0

iframeを使用して投稿を投稿すると、ファイルがアップロードされます。返されたコンテンツがすべて正常に動作しています。iframe submit投稿されたコンテンツを取得

私はページ上のiframeを表示した場合、私は私のiframe内に関数から返されたHTMLを参照してください。ページの内容を置き換えるためにiframeの内容を取得するのに苦労します。

基本的にボディはiframeのコンテンツを取得し、ページのbodyタグに配置します。 私はその1行または2行は確信していますが、ウェブ上で見つかったすべてのjquery、documentまたはgetElementByIdのアイデアは機能しません。

私は私が私のリロード機能で「console.info( 『somemessage』)​​を」使用しようとすると、それはコンソールが存在しないというエラーがスローされ、奇妙な何かに気づくありません。理由は分かりませんが、JavaScriptのフォーカスはiframeにあり、火かき棒は見えません。

コードを削除します。作業中の.loadイベントの試行に戻ります。その2行目はコンテンツを本文に書き込もうとしています。私がコメントアウトすると、iframeは自分のコンテンツとともに表示されます。コメントを外して実行すると、ページ全体がリロードされます。あなたの親ページ(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)はフォームタグ内にあります。フォームオブジェクトはjqueryのsubmithandlerを検証するオブジェクトです。 –

答えて

0

、あなたはそうのように、「メッセージ」イベントのイベントリスナーを設定できます。あなたのiframe内に続いて

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

、ちょうどポストこのような「親」ウィンドウへのメッセージ:

parent.postMessage(someString, parentUrl); 

メッセージが文字列なので、あなたはIFRAMEと親ウィンドウの間で送信している任意のデータをシリアル化する必要があります - 私はJSONを提案!したがって、あなたのケースでは、アップロードリクエストから返されたHTMLをシリアル化して親にポストし、それを逆シリアル化してDOMに挿入します。

+0

iframeの内容をシリアル化する方法を理解できません。 jquerys/json .serialize()を使用しようとしていますが、動作していません。 –

+0

どうしたらうまくいかないのですか?エラーメッセージはありますか? –

0

無効または不正な文字列は、「コード:」に指定されたiframeContentsが空である12

からでしょう。

  $("#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); 
      }); 
関連する問題