jQuery.append、输入和Windows应用商店应用程序(HTML/CSS/JS)
我有一个窗口商店应用程序,我想在其中动态添加一些标记,我的问题可以归结为: 工作jQuery.append、输入和Windows应用商店应用程序(HTML/CSS/JS),jquery,winjs,windows-store-apps,jsrender,Jquery,Winjs,Windows Store Apps,Jsrender,我有一个窗口商店应用程序,我想在其中动态添加一些标记,我的问题可以归结为: 工作 $('.some-element').append('<input type="radio"><label>Test</label>'); 有人知道有没有办法解决这个问题吗?(我需要jQuery,因为我想使用JsRender作为模板引擎)。您正在使用主机强制安全功能。Win8 HTML主机不喜欢从字符串创建元素;在本例中,它特别不喜欢在输入元素上放置name=”“属性。你能把名
$('.some-element').append('<input type="radio"><label>Test</label>');
有人知道有没有办法解决这个问题吗?(我需要jQuery,因为我想使用JsRender作为模板引擎)。您正在使用主机强制安全功能。Win8 HTML主机不喜欢从字符串创建元素;在本例中,它特别不喜欢在输入元素上放置name=”“属性。你能把名字改成id吗 有关什么是安全的详细信息,请参阅 错误消息实际上为您提供了两个解决错误的选项:
$('.some-element').append(toStaticHTML('<input type="radio" name="test"><label>Test</label>'));
$('.some element').append(toStaticHTML('Test'));
但这将导致创建的HTML看起来可能与您传入的字符串不同;toStaticHTML将去掉被认为不安全的元素和属性
第二种选择是直接使用domapi而不是jQuery来创建所讨论的元素,您已经说过这是不可能的
还有第三个选项,尽管它可能不允许您通过门店验证流程:
MSApp.execUnsafeLocalFunction(function() {
$('.some-element').append('<input type="radio" name="test"><label>Test</label>');
});
MSApp.execUnsafeLocalFunction(function(){
$('.some element').append('Test');
});
这将暂时禁用不安全的html检查除非已经进行了安全分析,否则不要执行此操作。特别是,不要使用从XHR获得的字符串来创建DOM,这是获取应用程序和用户机器pwnd的邀请。也许您可以使用
WinJS.Utilities.setInnerHTMLUnsafe(divName, '<input type="radio"><label>Test</label>');
WinJS.Utilities.setInnerHTMLUnsafe(divName,'Test');
您好,谢谢您的回答。本例中的主要问题是,我希望使用JsRender进行模板化,而这使用了jQuery。所以我自己并没有“直接”使用jQuery,所以toStaticHTML并不是一个真正的选项。我可以使用WinJS内置模板,但这有点违背了在Windows应用商店应用程序中使用常规web技术堆栈的意义(我想),但我想我还是坚持使用它,或者只是手动键入标记。再次感谢您的回复,这是非常有用的。还有几个选项供您选择,您仍然可以继续使用JsRender,尽管我在这里猜测,因为我不知道JsRender。首先,编辑渲染模板,以便不包括被认为不安全的内容。另一种方法是将对JsRender的调用封装在execUnsafeLocalFunction方法中,这将在调用堆栈期间关闭安全检查。虽然如果JsRender稍后进行模板呈现(knockout.js在从绑定更新时有此问题),但如果不编辑源代码,您将无法使用execUnsafeLocalFunction。我真的不知道哪些内容被认为是不安全的(那么我将遇到什么下一个问题?),在我的特定情况下是“名称”属性位于单选按钮上,因为我需要一个单选组。如果我不能使用它,我必须自己编写浏览器提供的功能(我对此并不感兴趣)。你是否遵循了我给出答案的链接?这是被认为安全/不安全的确切清单。
MSApp.execUnsafeLocalFunction(function() {
$('.some-element').append('<input type="radio" name="test"><label>Test</label>');
});
WinJS.Utilities.setInnerHTMLUnsafe(divName, '<input type="radio"><label>Test</label>');