iframeのonload関数は未定義です

私はRailsアプリケーションを開発しています。 1つの機能は、顧客にHTMLページをプレビューする機能を提供することです。プレビューコンテナのCSS /スタイリングがプレビュー自体のCSS /スタイリングと分離されるように、これらのプレビューをIFRAMEにロードしています。これまでのところ、これはかなりうまくいきます。

私が抱えている1つの問題は、IFRAMEがロードされると自動的にサイズを変更することです。 jQuery経由でIFRAMEの load イベントに関数を追加するだけで、Chromeでうまく動作します:

var show_preview = function() {
  $("#preview-loading").hide();
  $(this).show();
  this.style.height = this.contentWindow.document.body.scrollHeight + "px";
  return this.style.width = this.contentWindow.document.body.scrollWidth + "px";
}

$(function() {     
  return $("#preview_frame").load(function() {
    show_preview();
  });
});

しかし、これはIEではうまく機能しません。ページが最初に読み込まれたときにイベントが発生しないように見えます。

私が試みている回避策の1つは、IFRAMEの onload 属性に関数を直接割り当てることです:

 <iframe onload="show_preview();" ...></iframe>

私がここで抱えている問題は、IFRAMEがJavaScriptファイルで定義されている場合、 show_preview()関数を見つけることができないことです。関数を抽出してIFRAMEの上にあるSCRIPTタグに入れれば、すべて正常に動作します。

どんな助けでも気をつけてください。確かに私は何か骨折しています。

最大

2

1 答え

関数をウィンドウオブジェクトにアタッチすると、HTMLコードに表示されます:

window.show_preview = function() { ... }
2
追加された
素晴らしいありがとう
追加された 著者 maxenglander,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript