質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

5735閲覧

iframeの高さ自動調整のJavaScriptを教えて下さい。。

ENANAKAGAWA

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/09/01 14:27

編集2016/09/02 01:11

webページの一部で、iframeを使用して別ページを埋め込む。
このとき、スクロールを表示せず、埋め込んでない風に(いかにもページの一部ですよ風に)表示する。

をしたいと思ってます。

(分岐が多いフォームなので、1ファイルでやらずに、ファイルを分けて、選択によって表示ファイルを変えようとしてます。)

いろいろ探して、以下のページにたどりついたのですが、
手元のJavaScriptのファイルが、外部ファイルで、関数使ってます。

http://dtp.jdash.info/archives/jQuery_iframe_auto_height_script

(function(window, $){ $(window).on("load",function(){ $('iframe.autoHeight').each(function(){ var D = $(this).get(0).contentWindow.document; /* console.log( D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight ); */ var innerHeight = Math.max( D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight ); $(this).css('height', innerHeight + 'px'); }); }); })(window, jQuery);

上記を

function hogehoge(){

}

という形に書き換えてみたのですが、全く動く気配がなく、
スクロールバーが出てしまいます。

書き方が間違えてるのでしょうか。。。

function autoHeight(){ (function(window, $){ $(window).on("load",function(){ $('iframe.autoHeight').each(function(){ var D = $(this).get(0).contentWindow.document; var innerHeight = Math.max( D.body.scrollHeight, D.documentElement.scrollHeight, D.body.offsetHeight, D.documentElement.offsetHeight, D.body.clientHeight, D.documentElement.clientHeight ); $(this).css('height', innerHeight + 'px'); }); }); })(window, jQuery); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/09/01 18:27

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、URLにはリンクを張ることができます。
ENANAKAGAWA

2016/09/02 01:12

ありがとうございます! 分かっておらず申し訳ありません。 ご指摘の内容を編集してみました。
guest

回答2

0

ベストアンサー

とりあえず書き方は下記のようになるとおもいます。

JavaScript

1function autoHeight(){ 2 $('iframe.autoHeight').each(function(){ 3 var D = $(this).get(0).contentWindow.document; 4 var innerHeight = Math.max( 5 D.body.scrollHeight, D.documentElement.scrollHeight, 6 D.body.offsetHeight, D.documentElement.offsetHeight, 7 D.body.clientHeight, D.documentElement.clientHeight 8 ); 9 $(this).css('height', innerHeight + 'px'); 10 }); 11}

また、iframe 内が別ドメインであれば、操作できません。デベロッパーツールにエラーがでると思います。

【iframe 要素 - HTML | MDN】
https://developer.mozilla.org/ja/docs/Web/HTML/Element/iframe#Scripting

フレームの内容にアクセスしようとするスクリプトは同一オリジンポリシーに従います。別のドメインから読み込まれたスクリプトは他の window オブジェクトのほとんどのプロパティにアクセスできません。これは、親ウィンドウにアクセスしようとするフレーム内のスクリプトにも当てはまります。

【IFrameオブジェクト | JavaScript プログラミング解説】
http://so-zou.jp/web-app/tech/programming/javascript/dom/node/element/html/iframe/

外部サイトのcontentDocumentを読み込もうとすると、ブラウザごとに下表のような反応を示します。

投稿2016/09/02 10:26

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ENANAKAGAWA

2016/09/02 11:40

ありがとうございます! やってみます!! iframeしたいのは、同じところにあるやつを使うので大丈夫だと思うんですが、 エラー出たら教えていただいたURL参考にしてみます!
guest

0

$(window).on("load",function(){~ は画面の読み込み(load)が完了した際に実行する処理を登録します。
そのため、ページ読み込み完了後にautoHeight()関数を呼び出しても、何も起こりません。

任意のタイミングでautoHeightを呼び出してiframeを調整したいのでしたら、iframeの調整部分だけを抜き出して実行する必要があります。

投稿2016/09/02 02:44

attercop

総合スコア246

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ENANAKAGAWA

2016/09/02 11:46

ありがとうございます! やりたいのは、画面の読み込みの時なので大丈夫なのですが、 いただいたコメントで、そもそも関数をつくっただけで、呼び出してないことに気が付きました。。。 そもそも書き方もまちがえてたようなので、呼び出しても動かなかったとは思うのですが。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問