6

我正在制作一个 javascript Metro 应用程序并有一些这样的代码:

    <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,你可以使用这个函数(但微软不推荐它):

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 的更多信息

Windows 10 不需要此文件。

于 2017-06-05T15:25:33.700 回答