Ajaxtoolkit的可访问性问题

时间:2012-04-19 12:25:41

标签: asp.net security visual-studio-2008 section508

我正在为现有应用程序开发Section 508合规性。

现在,当我使用http://achecker.ca/checker/index.php测试我的页面508时,它显示“脚本必须有一个noscript部分。”用于Ajax生成的脚本。

如何让Ajax工具包在客户端生成脚本后附加noscript标记。

2 个答案:

答案 0 :(得分:1)

noscript标记用于显示脚本的替代标记,例如用户禁用它时。所以如果你有:

<script type="text/javascript">
<!--
var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
document.write(month + "/" + day + "/" + year)
//-->
</script>

该检查员在代码块之后或在页面上看到您是否有<noscript>。对于较大的AJAX支持的应用,<noscript>会在结束<body>之前出现。确保你对你说/放的内容有良好的判断力。我见过开发人员:

<script type="text/javascript">
<!--
var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
document.write(month + "/" + day + "/" + year)
//-->
</script>
<noscript>
<p>Wow, you suck because you disabled javascript.</p>
</noscript>

请比这更成熟。

答案 1 :(得分:0)

在Global.asax中,我添加了以下事件,它就像一个魅力

void Application_PostReleaseRequestState(object sender,EventArgs e)

{
    //add no script tag for 508 compatibility               
    if(Response.ContentType == "text/html")
    {
       //add no script tag for 508 compatibility
        Response.Filter = new NoScriptTagAppendFilter(Response.Filter);
    }        
}

public NoScriptTagAppendFilter(Stream stream)

{
    outputStream = stream;
}

public override void Write(byte[] buffer, int offset, int count)
{
    //base.Write(buffer, offset, count);
    string data = UTF8Encoding.UTF8.GetString(buffer);
    data = Regex.Replace(data, "</script>", "</script><noscript></noscript>");
    outputStream.Write(UTF8Encoding.UTF8.GetBytes(data), offset, UTF8Encoding.UTF8.GetByteCount(data));
    data = null;
}

这肯定会帮助将来想要获得Ajax和Ajax生成的脚本的508兼容性的人。使用http://achecker.ca/checker/index.php

进行测试