【问题标题】:Is there a fix or work around for jqGrid executing script tags when performing a save of an inline-edit执行保存内联编辑时 jqGrid 执行脚本标记是否有修复或解决方法
【发布时间】:2013-05-03 15:57:59
【问题描述】:

我在 jqgrids 站点的在线编辑下找到了 zbacsi 的评论。 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#how_is_the_data_organized

"zbacsi, 2010/08/02 20:23 有一个带有特殊字符的转义错误。尝试将 alert('hello') 插入字段。它应该显示为普通文本,但它被执行了……”

我能够使用以下版本的 jqGrid 和 jQuery 在我自己的网格设置上重现此问题。

jqGrid 版本 -> 4.4.4,jQuery 版本 -> 1.7.1。

这也可以在 jqGrid 的内联编辑演示页面上复制,位于:

http://www.trirand.com/blog/jqgrid/jqgrid.html

在那里导航到:

功能 -> 格式化操作并开始编辑一行。

在标有“注释”的列内插入值:<script>alert('hi')</script>

按回车键或点击“保存”图标。

alert('hi') 被执行而不是包含 <script>alert('hi')</script> 的 'Notes'

非常感谢您提供任何其他信息,谢谢。

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    这不是错误。您可以通过使用选项解决问题

    autoencode: true
    

    我个人强烈建议您在所有网格中使用该选项

    jqGrid 有很多选择。我个人发现某些选项的默认值(请参阅the page 文档的“默认”列中的值)不是最佳值。其中一个选项是autoencode,默认值为false。这意味着用于填充网格单元格的所有数据都将被解释为 HTML 代码片段。脚本是唯一的问题,但插入 a>b</tr><-- 之类的文本可能真的会破坏页面。

    jqGrid 允许通过扩展$.jgrid.defaults 覆盖默认值。因此,我在每个 HTML 页面 JS 文件中都包含我自己的默认首选项。在文件中有类似的行

    $.extend($.jgrid.defaults, {
        autoencode: true,
        gridview: true,
        height: "auto"
        datatype: "json",
        loadui: 'block',
        ...
    });
    

    【讨论】:

    • 非常感谢 Oleg,这确实解决了 jqGrid 执行脚本标签的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2018-02-17
    • 1970-01-01
    相关资源
    最近更新 更多