6

私はjavascriptメトロアプリを作成していて、次のようなコードがあります:

    <script>
       document.writeln(foo());//this line is trouble
    </script>

実行しようとすると、かなり長いエラーが発生しました。

ms-appx://a375ffac-3b69-475a-bd53-ee3c1ccf4c4e/default.htmlの行20、列9で未処理の例外

0x800c001c-JavaScriptランタイムエラー:動的コンテンツを追加できません。スクリプトが動的コンテンツ、または以前に動的に変更された要素を挿入しようとしましたが、これは安全ではない可能性があります。たとえば、innerHTMLプロパティを使用してスクリプトまたは不正な形式のHTMLを追加すると、この例外が生成されます。toStaticHTMLメソッドを使用して動的コンテンツをフィルタリングするか、createElementなどのメソッドを使用して要素と属性を明示的に作成します。詳細については、 http: //go.microsoft.com/fwlink/?LinkID=247104を参照してください。

どうすればこれを回避できますか?

4

3 に答える 3

13

Windows 8は、安全でないと見なされるため、innerHTMLおよびWritelnを介して設定できるコンテンツを制限します...

コンテンツを追加する正しい方法は次のとおりです。

// The untrusted data contains unsafe dynamic content
var unTrustedData = "<img src='http://www.contoso.com/logo.jpg' on-click='calltoUnsafeCode();'/>";

// Safe dynamic content can be added to the DOM without introducing errors
var safeData = window.toStaticHTML(unTrustedData);

// The content of the data is now 
// "<img src='http://www.contoso.com/logo.jpg'/>" 
// and is safe to add because it was filtered
document.write(safeData);

コードにjavascriptが含まれている場合は、この関数を使用できます(ただし、Microsoftは推奨していません)。

MSApp.execUnsafeLocalFunction(function() {
    var body = document.getElementsByTagName('body')[0];
    body.innerHTML = '<div style="color:' + textColor + '">example</div>';
});

で参照してください:

http://msdn.microsoft.com/en-us/library/windows/apps/Hh767331.aspx

あなたの場合:

MSApp.execUnsafeLocalFunction(function() {
    document.writeln(foo());
});

これは、コンテンツが安全であると理解している場合にのみ行う必要があることに注意してください。そうでない場合は、このtoStaticHTML方法を使用することをお勧めします。

于 2013-01-23T02:18:20.377 に答える
5

私が試すドキュメントに関して:

document.writeln(window.toStaticHTML(foo()));
于 2013-01-23T02:16:18.707 に答える
0

Windows 8ストアアプリには、innerHTML属性内に動的コンテンツを配置する際の制限があります。これを修正するには、最初の参照として、ページ内の次の場所にあるwinstore-jscompat.jsファイルを含める必要があります。winstore-jscompatの詳細については、このリンクを参照してください。

このファイルはWindows10では必要ありません。

于 2017-06-05T15:25:33.700 に答える