WinJSの「ストア」アプリでユーザーにインスタペーパーの記事を表示するために使用したいiframeがあります。これの非常に優先度の高い機能は、ユーザーがオフライン中にダウンロードして保存した記事を読めるようにすることです。
ローカルにキャッシュされた html ファイルを表示することを、Web から任意の html ドキュメントを表示することよりも困難にする不条理のすべてに入るわけではありません。私の現在の問題/質問は、iframe と、それが html テキストをどのように扱うかです。
次のように、テキスト ファイルから読み取った文字列に html ドキュメントがあるとします。
<html>
<head>
<title>Foobar!</title>
</head>
<body>
<h1>Foo</h1>
<div>Bar</div>
</body>
</html>
<div>
要素の innerHTML プロパティを (メソッドを介して)設定しWinJS.Utilities.setInnerHTMLUnsafe
、プロパティを調べると、期待どおりの出力が得られます。
>document.getElementById("article-frame").innerHTML
"
<title>Foobar!</title>
<h1>Foo</h1>
<div>Bar</div>
"
ここで、 のみを使用して同じことを行うと<iframe>
、次の結果が得られます。
>document.getElementsByTagName("iframe")[0].innerHTML
"<html>
<head>
<title>Foobar!</title>
</head>
<body>
<h1>Foo</h1>
<div>Bar</div>
</body>
</html>"
明らかに、iframe はテキストを HTML エンコードしていますが、div はそうではありません。これは設計によるものであり、もしそうなら、なぜ動作がそれほど劇的に異なるのでしょうか? iframe でこの種の動作を見た覚えはありませんが、iframe を使用しなければならなくなってから何年も経っています。CSS が div に流れ込むのを防ぐことができないため、単に div を使用しないことをお勧めします (要素 ID を埋め込みスタイルシートに追加することで、CSS が逆方向に流れ込むのを防ぐことができますが、それは UX にはあまり役立ちません)。 .
私はすでにsrc
、ユーザーの appData に保存されているファイルをプロパティ経由で iframe にロードさせようとして、途方もない時間を費やしましたが、成功しませんでした。これらの継続的な障害は、非常に苛立たしいものになる可能性があります。
innerHTML
編集:フレームのプロパティのプロパティを設定しようとしましたが、HTML が表示またはレンダリングされないことを除いてcontentDocument
、実験と同様の結果が得られました。div
興味深いことに、とinnerHTML
の両方のプロパティをチェックした結果も出力されます(後者の結果は空であることに注意してください)。contentDocument
iframe
> document.getElementsByTagName("iframe")[0].contentDocument.innerHTML
"<html>
<head>
<title>Foobar!</title>
</head>
<body>
<h1>Foo</h1>
<div>Bar</div>
</body>
</html>"
> document.getElementsByTagName("iframe")[0].innerHTML
""
参照
http://technet.microsoft.com/en-us/subscriptions/hh781229.aspx
http://social.msdn.microsoft.com/Forums/en-US/windowsstore/thread/e13791b2-7fc3-40cb-a284- f927aaa3a9e3