2016-06-21 2 views
0

紛らわしいタイトルのためにお詫び申し上げます。

フレンドリーなiframeを含むウェブページがあり、その内部にスクリプトタグがiframeに含まれています。 document

<iframe src="Javascript:'<div id=\'target\'></div><script src=\'appendStuff.js\'><\/script>'"></iframe> 

appendStuff.js負荷のjQueryをし、次のような操作を行います:基本的に、それはこのようになります。これは、正常に動作します

doc = document; // the iframe's document 
$('<h1>Loaded!</h1>').appendTo('#target', doc); 

。しかし、appendStuff.jsの別のバグを修正するには、iFrame内にあるdocumentではなく、window.top.documentにjQueryを移動してロードする必要がありました。

ここで、.appendTo('#target', doc)コールは自動的に失敗し、何も追加されません。

$('#target', doc)を選択するだけで正常に動作するように見えるため、これは非常に混乱します。

これが実際に壊れているかどうか、私が何か間違っている場合、またはこの問題を回避する方法があるかどうかは誰にも分かりますか?

+0

appendToは単一の引数を受け取ります。おそらく '$( '

Loaded!

').appendTo($( 'target'、doc)); ' –

+0

@AlexKudryashevそれが問題でした!本当にありがとう。これを答えとして書くと、私はそれを受け入れます。 – Mordred

答えて

0

jQueryはドキュメントの準備ができています。 「appendStuff.jsの別のバグを修正する」と言いますと、私の最初の推測は、バグにはドキュメントの準備が整う前に実行しようとしていたコードと関係があり、jQuery自体がロードされる前です。コンソールで、$( '#target'、doc)を手動で選択しようとしているときには、ページがロードされた後、つまりドキュメントの準備が整った後でそれをやっていると推測します。

まず、あなたのappendStuff.jsを見てください。推測すると、$(function(){...})でラップする必要があります。ロードオーダーの問題を修正しました。また、How can I detect whether an iframe is loaded?How to check if iframe is loaded or it has a content?を見てください。本当に親にこのロジックがあるように聞こえるので、iframeにshoehorningするのではないでしょうか。

+0

残念ながら、問題ではありません。すべてがすでにドキュメントの準備が整うのを待つためにラップされています。はい、私はコンソールでそのコードをテストしていましたが、実際のソースコードの次の行でもうまく動作します。明らかに、もし私がそこに置くことができればそれは親になるだろうが、他のウェブサイトによって実際に読み込まれたappendStuff.jsはiframeの中にロードされていることが多い。私もこの情報で私の質問を更新します。 – Mordred

関連する問題