2

jQueryMobileを使用して1ページのWebサイトを作成しました。

「1ページ」とは、ウェブサイト全体が1つのindex.htmlファイルで構成され、アンカーを介してさまざまなコンテンツが表示されることを意味します。

  • index.html#start
  • index.html#contact
  • index.html#aboutus
  • 等々...

私は次のようにJavaScriptを介してiFrameを作成しました:

var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

2行目で、次のような例外が発生します。

Uncaught TypeError:nullのプロパティ'document'を読み取れません

これはこの呼び出しから来ているようです:

iframe.contentWindow.document

したがって、明らかに、両方ともiframe.contentWindownulliframe.contentDocumentです。

ここに奇妙な部分があります:これはアンカーの1つでのみ発生します

例:URL index.html#startを使用して直接Webサイトにジャンプすると、すべてが機能しますが、index.html#aboutusでは上記の例外が発生します。

両方のアンカーの違いは何ですか?私に聞かないでください。どちらも完全に異なり、どこからデバッグを開始すればよいかわかりません。

さて、私の質問は次のようになります。いったいなぜ上記のコードはアンカー#aboutusでは機能せず、アンカー#startでは機能するのでしょうか。


更新:あなたのためのいくつかのより多くの情報:

  1. src属性を使用せずに、代わりにiFrameDoc.write()関数を使用して、iframeのコンテンツを動的に入力したいと思います。ご覧のとおり、これにはnullのiframeドキュメントが必要です。このアプローチは他のアンカーでは完全に機能しますが、私の1つの特定のアンカー「サイト」では機能しません。

    iframeDoc.open(); iframeDoc.write('Foo'); iframeDoc.close();

  2. また、iframeが読み込まれるまでしばらく待ってみました。

それでも同じ結果

var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
setTimeout(function(){
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
}, 3000);

iframeにコンテンツがまだ書き込まれていないため、「ロード」イベントは発生していません。

4

1 に答える 1

1

私はついに問題の原因を見つけました。変数「container」に格納された要素が DOM ツリーに正しく関連付けられていませんでした。そのため、iframe も dom の一部ではなく、ドキュメントが作成されませんでした。

于 2013-01-30T10:59:48.037 に答える