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.contentWindow
nulliframe.contentDocument
です。
ここに奇妙な部分があります:これはアンカーの1つでのみ発生します
例:URL index.html#startを使用して直接Webサイトにジャンプすると、すべてが機能しますが、index.html#aboutusでは上記の例外が発生します。
両方のアンカーの違いは何ですか?私に聞かないでください。どちらも完全に異なり、どこからデバッグを開始すればよいかわかりません。
さて、私の質問は次のようになります。いったいなぜ上記のコードはアンカー#aboutusでは機能せず、アンカー#startでは機能するのでしょうか。
更新:あなたのためのいくつかのより多くの情報:
src属性を使用せずに、代わりにiFrameDoc.write()関数を使用して、iframeのコンテンツを動的に入力したいと思います。ご覧のとおり、これにはnullのiframeドキュメントが必要です。このアプローチは他のアンカーでは完全に機能しますが、私の1つの特定のアンカー「サイト」では機能しません。
iframeDoc.open(); iframeDoc.write('Foo'); iframeDoc.close();
また、iframeが読み込まれるまでしばらく待ってみました。
それでも同じ結果
var iframe = $("<iframe>").addClass("myframe").appendTo(container).get(0);
setTimeout(function(){
var iframeDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
}, 3000);
iframeにコンテンツがまだ書き込まれていないため、「ロード」イベントは発生していません。