javascriptの外部スクリプトを利用してiframeを表示させたいのですがうまくいきません。


document.write("<iframe src='https:abc.html' width='800' height='800' frameborder='0' marginwidth='0' marginheight='0'></iframe>
")

これではうまく表示できないのですが何故でしょう?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/06/18 21:58:03
  • 終了:2014/06/25 22:00:07

回答(4件)

id:watercooler No.1

井戸端さん回答回数289ベストアンサー獲得回数512014/06/18 22:26:06

ポイント50pt

iframeはエレメント生成からが基本よ。このあたりが参考になるかしら?
JavaScript による IFRAME の動的実装

id:snow0214 No.2

snow0214回答回数470ベストアンサー獲得回数1162014/06/18 22:32:43

ポイント50pt

改行の位置とかが間違っていませんか。
IE11で下のスクリプトは正常に動作します。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
document.write("<iframe src='http://q.hatena.ne.jp/1403096283' width='800' height='800' frameborder='0' marginwidth='0' marginheight='0'></iframe>");
</script>
</body>
</html>
id:a-kuma3

多分、フレームに埋め込もうとしてる *先* の問題なのだと思います。

2014/06/18 22:56:50
id:a-kuma3 No.3

a-kuma3回答回数4584ベストアンサー獲得回数19242014/06/18 22:50:54

ポイント50pt

読み込もうとしている URL が https:abc.htm と、ホストが抜けているのはご愛嬌として、うまくいかないのは iframe で読み込もうとしてる先が X-Frame-Options を指定しているのだと思います。
https://developer.mozilla.org/ja/docs/HTTP/X-Frame-Options
https://www.jpcert.or.jp/tips/2010/wr103601.html

例えば、https://www.google.com/ では X-Frame-Options は、以下のように返ってきます。

X-Frame-Options:    SAMEORIGIN

こう返ってくる URL では、同じサイトのページでしかフレーム内に入れることができず、

document.write("<iframe src='https://www.google.com/' width='800' height='800' frameborder='0' marginwidth='0' marginheight='0'></iframe>")

と書こうが、No.1 の回答のような DOM を使って埋め込もうが、

    var e = document.createElement("iframe");
    e.src = "https://www.google.com/";
        ...
    document.body.appendChild(e);

最近のブラウザでは、エラー扱いになります。


規制があれば、逃げ道を作ろうとするやつが出てくるのは当然の成り行きで、こんな回避の仕方があるようですが。
http://stackoverflow.com/questions/19921676/does-not-permit-cross-origin-framing-iframe

つまり、X-Frame-Options ヘッダで規制をかけないところを経由して、読みだせば良いじゃない、と。
先ほどの規制がかかっていたコードを、以下のように直せば、(無理矢理感は半端ないですが)読めなくはないです。
document.write を使う場合。

document.write("<iframe src='http://whateverorigin.org/get?url=https://www.google.com/' width='800' height='800' frameborder='0' marginwidth='0' marginheight='0'></iframe>")

DOM で iframe を使う場合。

    var e = document.createElement("iframe");
    e.src = "http://whateverorigin.org/get?url=https://www.google.com/";
        ...
    document.body.appendChild(e);
id:u_7cc No.4

7cc回答回数32ベストアンサー獲得回数142014/06/19 13:39:29

ポイント50pt

srcに指定するURLは次の2通りあります。まずはどちらかの書き方にしてください。
それで上手く行かない場合は、No.3の回答にある通りです。

相対パス httpなし

  1. <iframe src="abc.html"></iframe>
  2. <iframe src="/abc.html"></iframe>
  3. <iframe src="../abc.html"></iframe>

絶対パス http(s)あり

  1. <iframe src="http://example.com/abc.html"></iframe>

*example.comは任意のサイトに変える。

id:a-kuma3

あ、相対パスかもしれないのか。

2014/06/19 14:48:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません