JavaScript运行时错误:无法添加动态内容

Chi*_*hin 6 javascript microsoft-metro windows-8

我正在制作一个javascript地铁应用,并有一些这样的代码:

    <script>
       document.writeln(foo());//this line is trouble
    </script>
Run Code Online (Sandbox Code Playgroud)

当我试图跑步时,它给了我一个相当长的错误:

ms-appx://a375ffac-3b69-475a-bd53-ee3c1ccf4c4e/default.html第20行第9行未处理的异常

0x800c001c - JavaScript运行时错误:无法添加动态内容.脚本试图注入可能不安全的动态内容或先前动态修改的元素.例如,使用innerHTML属性添加脚本或格式错误的HTML将生成此异常.使用toStaticHTML方法过滤动态内容,或使用createElement等方法显式创建元素和属性.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkID=247104.

我怎么能绕过这个?

Bru*_*hes 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);
Run Code Online (Sandbox Code Playgroud)

如果你的代码有一些javascript,你可以使用这个函数(但微软不要推荐它):

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

见:

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

对于你的情况:

MSApp.execUnsafeLocalFunction(function() {
    document.writeln(foo());
});
Run Code Online (Sandbox Code Playgroud)

请注意,只有在您了解内容安全的情况下才能执行此操作; 如果你不这样做,我建议使用这个toStaticHTML方法.


Dr.*_*lle 5

关于我会尝试的文档:

document.writeln(window.toStaticHTML(foo()));
Run Code Online (Sandbox Code Playgroud)