0

我正在为现有应用程序进行第 508 节合规性工作。

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

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

4

2 回答 2

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>

请比这更成熟。

于 2012-04-20T22:03:55.003 回答
0

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

void Application_PostReleaseRequestState(对象发送者,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);
    }        
}

公共 NoScriptTagAppendFilter(流流)

{
    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 生成的脚本进行 508 兼容性并使用http://achecker.ca/checker/index.php进行测试的人

于 2012-05-29T08:12:20.797 回答