我的应用程序动态地将HTML内容构建为字符串,完成后将内容附加到DOM。但是在WinJS中,一旦我尝试将字符串附加到DOM,就会抛出异常。为了解决这些异常,我必须通过运行toStaticHTML来清理HTML,这是在WinJS和Internet Explorer中全局定义的。我遇到的问题是data- * html5属性的使用非常多。一旦我通过toStaticHTML运行它们就会被剥离。为什么toStaticHTML删除data- *属性?与他们真正的安全问题是什么?
请注意,我无法将DOM插入包装在MSApp.execUnsafeLocalFunction中,因为我使用的是jQuery而且我不允许修改jQuery代码。
var html = "<ul><li data-role='list-node'>My list node</li></ul>";
$('#container').html(toStaticHTML(html));
产地:
<ul>
<li>My list node</li>
</ul>
答案 0 :(得分:7)
这是因为安全性担心将HTML的随机位插入到文档中,并且可能允许不安全的代码在受保护的上下文(您的应用程序,可以完全访问WinRT和用户文档)中执行。
在发展HTML /网络模式的情况下, toStaticHtml
旨在保持“安全”,因此它是白名单而不是黑名单。
鉴于您在这里遇到的挑战,我看到以下选项:
msExecUnsafeLocalFunction
中的jquery(见下文)。这意味着对于该呼叫的生命,所有Dom插入都将没有问题。这不需要更改jquery,只需要更改代码。msExecUnsafeLocalFunction
WinJS.Binding.Template
呈现内容而不是Jquery。这会克隆节点而不是字符串化HTML setAttribute
设置属性。msExecUnsafeLocalFunction的示例用法:
MSApp.execUnsafeLocalFunction(function() {
$('#container').html(html);
});
答案 1 :(得分:3)
此处未列出data-role
- 属性:http://msdn.microsoft.com/en-us/library/windows/apps/hh465388.aspx
这是一个未知属性,将被删除。
答案 2 :(得分:0)