Kon*_*nev 3 javascript jquery html5 internet-explorer winjs
我的应用程序动态地将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));
Run Code Online (Sandbox Code Playgroud)
生产:
<ul>
<li>My list node</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
这是因为安全性担心将HTML的随机位插入到文档中,并且可能允许不安全的代码在受保护的上下文(您的应用程序,可以完全访问WinRT和用户文档)中执行.
toStaticHtml在发展HTML /网络模式的情况下,它旨在保持"安全",因此它是白名单而不是黑名单.
鉴于您在这里遇到的挑战,我看到以下选项:
msExecUnsafeLocalFunction(见下文).这意味着对于该呼叫的生命,所有Dom插入都将没有问题.这不需要更改jquery,只需要更改代码.msExecUnsafeLocalFunctionWinJS.Binding.Template渲染你的内容,而不是jQuery的.这会克隆节点而不是对HTML进行字符串化setAttribute插入安全节点后设置属性.msExecUnsafeLocalFunction的示例用法:
MSApp.execUnsafeLocalFunction(function() {
$('#container').html(html);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2421 次 |
| 最近记录: |