【问题标题】:google closure library sanitizer.sanitize removes my id on dom elements谷歌关闭库 sanitizer.sanitize 删除我在 dom 元素上的 id
【发布时间】:2017-05-29 14:10:19
【问题描述】:

我正在使用 goog.dom.safeHtmlToNode 动态更新带有内容的选项卡

因为新版本的 google 闭包库删除了 dom 片段方法:goog.dom.htmlToDocumentFragment(htmlString)

消毒剂会从 dom 元素中删除我的“id=xyz”。例如:

'<input type="email" id="openid" name="openid" size="20" style="font-size: 18px" />'

变成

'<input type="email" size="20" style="font-size: 18px;" />'

我使用 id 从这些元素中获取用户输入的内容。 我如何告诉消毒剂不要删除这些属性?我尝试了以下代码但没有成功:

var sanitizer =
new goog.html.sanitizer.HtmlSanitizer.Builder()
.withCustomNetworkRequestUrlPolicy(goog.html.SafeUrl.sanitize)
.allowCssStyles()
.allowFormTag()
.addOriginalTagNames()  
.allowDataAttributes([ "data-id","data-name" ]) //data-* attributes are inert as per HTML5 specs
.build();

goog.dom.safeHtmlToNode( sanitizer.sanitize (htmlString) );

我也尝试将我的“id”重命名为“data-id”,字符串仍然从净化的输出中删除。

Thank you in advance for your help on this matter.

【问题讨论】:

    标签: javascript dom google-closure-library


    【解决方案1】:

    这将令牌策略更改为允许全部而不是不允许。令牌策略用于 ID 和 CLASS 属性,因此这应该允许您保留 ID 属性。

    .withCustomTokenPolicy(goog.functions.identity)
    

    【讨论】:

    • 谢谢。制定政策起到了作用。我在哪里可以找到关于 google 闭包库的其他文档,即教程、示例(是的,我知道它附带的演示)。我通常使用测试程序来弄清楚如何调用函数。有更多信息肯定会很好!无论如何谢谢你!现在可以了!
    【解决方案2】:

    这是您通过online closure compiler 测试用例的示例

    我刚刚在.allowDataAttributes([ "id","data-id" ]) 中添加了“id”和“data-id”作为值。

    如果您在“高级模式”下编译示例并将结果粘贴到控制台中,您将看到“id”和“data-id”在那里。

    【讨论】:

    • 我在运行时遇到断言错误。我查看了代码,这个函数需要前缀“data-”。不过谢谢你....每个提示都有帮助!
    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2022-12-31
    • 2012-10-17
    • 2012-04-25
    • 1970-01-01
    • 2011-03-15
    相关资源
    最近更新 更多