1

私は iframe を持っており、次のコードを使用していくつかの html+javascript を動的にロードします。

var allMyCode = "<div id='test'>html code</div> <script type='text/javascript'>alert(document.getElementById('test').innerHTML);<\/script>";
$("#myFrame").contents().find("body").html(allMyCode);

問題は、これでテキスト「htmlコード」を警告したいのですが、実際には「テスト」のIDを持つ親のdivでhtmlを取得するため、それ自体を参照していません。私はこのフィドルでこれを示しました: http://jsfiddle.net/BNG4n/

なぜこれを行うのか、JavaScript を独自のスコープで実行するにはどうすればよいでしょうか!?

4

2 に答える 2

3

jQuery常に親スコープにある iframe の body 要素の html を設定する前に script 要素を実行するためです。

スクリプト要素を作成して、iframe の本体内に追加すると、期待どおりに機能します。

このようなもの。

var allMyCode = "<div id='test'>html code</div>";
$("#myFrame").contents().find("body").html(allMyCode);
var el = document.createElement("script");
el.setAttribute("type","text/javascript");
el.innerHTML = "alert(document.getElementById('test').innerHTML);";
$("#myFrame").contents().find("body")[0].appendChild(el);

実際のデモ - http://jsfiddle.net/BNG4n/1/

于 2012-05-01T17:07:36.120 に答える
0

問題は、この時点で javascript が関係している限り、まだ親ドキュメントを参照している js 内のドキュメントを参照していることです。

代わりに、最初にフレーム (document.getElementById('myFrame')) を見つけてから、次のようにフレーム (contentWindow.document) のテスト ID 内から HTML コンテンツを見つける必要があります。

var allMyCode = "<div id='test'>html code</div> <script type='text/javascript'>alert(document.getElementById('myFrame').contentWindow.document.getElementById('test').innerHTML);<\/script>";
于 2012-05-01T17:13:43.643 に答える