Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery.append、输入和Windows应用商店应用程序(HTML/CSS/JS)_Jquery_Winjs_Windows Store Apps_Jsrender - Fatal编程技术网

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吗

有关什么是安全的详细信息,请参阅

错误消息实际上为您提供了两个解决错误的选项:

  • 使用toStaticHTML方法过滤动态内容
  • 显式创建元素和属性
  • 使用toStaticHTML的情况如下所示:

        $('.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>');