如何防止营销人员的Web表单注入自己的jquery-ui.custom.Default.css

时间:2012-02-14 18:59:02

标签: sitecore web-forms-for-marketers

我最近在Web Forms for Marketers (WFFM)项目中使用过Sitecore,我注意到它注入了:

<link href="/sitecore%20modules/shell/Web%20Forms%20for%20Marketers/themes/colors//jquery-ui.custom.Default.css" rel="stylesheet" type="text/css" />

有没有办法禁用链接,以便只将我指定的CSS文件添加到页面中?


在审核了更多WFFM来源后,我发现已通过<link />将不需要的Page.Header.Controls添加到页面中:

if (page.Header != null)
{
    if (!flag)
    {
        try
        {
            //possibly added as link, unless an exception is thrown
            page.Header.Controls.Add((Control) htmlLink);
            linkDictionary.Add(key, key);
            continue;
        }
        catch (Exception ex)
        {
            //added manually
            HtmlTextWriter writer = new HtmlTextWriter((TextWriter) new StringWriter(new StringBuilder()));
            htmlLink.RenderControl(writer);
            page.ClientScript.RegisterClientScriptBlock(typeof (Page), writer.InnerWriter.ToString(), writer.InnerWriter.ToString());
            flag = true;
            continue;
        }
    }
}

这意味着我可以检查所有标题控件并隐藏包含"jquery-ui.custom.Default.css"的标题控件,但这仍然感觉像是一个脏兮兮的黑客(它就是这样)。在page.Header.Controls.Add抛出异常的情况下,它也不会删除链接。

2 个答案:

答案 0 :(得分:3)

我已经对WFFM进行了反编译,但它似乎无法配置为更改或关闭它。因此,解决此问题的一种方法是直接编辑此文件并清除其内容。它仍将被加载,但不包括任何CSS。

<强>更新

根据您的更新,您也可以尝试这样的事情:

Control ctl = WebUtil.FindControlOfType(Sitecore.Context.Page.Page, typeof(TYPE-OF-EXPECTED-CONTROL));

替换TYPE-OF-EXPECTED-CONTROL的位置。从这里你可以做任何你想做的事,例如弄清楚它是否包含CSS等链接

答案 1 :(得分:3)

如果文件系统中没有样式表,

营销人员的Web表单实际上将添加<link>标记。

根本问题是TDS缓存了已移除样式表的副本,并在每次构建时将其添加到Web目录中。清理构建并确保清除缓存的TDS文件解决了问题,而无需添加服务器端代码。