如何在xHTML中验证noscript +元刷新标记?

时间:2010-08-31 14:34:41

标签: xhtml w3c-validation xhtml-1.0-strict

对于不支持JavaScript的访问者,我将其重定向到某个页面 - “js.html”。

为此,我在所有文件中都有以下内容:

<noscript>
<meta http-equiv="Refresh" content="0;URL=js.html" />
</noscript>

当然,这不会在XHTML中验证,因为noscript必须放在<body>中。 但是当我将该代码放在我的文档正文中时,我得到了另一个错误,因为元标记只能在<head>部分中使用,所以我在这里陷入无限循环。

有没有办法进行验证?它适用于所有浏览器,所以这不是什么大问题,我只是想验证我的应用程序。

3 个答案:

答案 0 :(得分:12)

以下是您可以做的事情:

将元数据插入脑袋,但刷新时间为2秒。并且在那个地方旁边有一个删除元刷新的SCRIPT标记。所以任何JS用户都不会被重定向:

<meta id="refresh" http-equiv="Refresh" content="10;URL=js.html" />
<script type="text/javascript">
    $('refresh').remove();
</script>

浏览器可能已经“提到”了元刷新。所以你可以使用JavaScript在它周围编写一个开始和结束的HTML注释(包括一个打开的脚本标记来关闭第二个document.write的脚本标记):

<script type="text/javascript">
    document.write("<!-- ");
</script>
<meta http-equiv="Refresh" content="2;URL=js.html" />
<script type="text/javascript">
    document.write(' --><script type="text/javascript">');
</script>

我可以成功测试这个。

只是提示我如何处理非js用户。我有一个名为“js”的css类,我添加到任何应该只对javascript用户可见的元素。通过javascript我添加一个css文件,其中包含类“js”的规则,该规则显示具有“js”类的每个元素。所有链接(功能)都是设计的,可以在没有javascript的情况下使用,也可以在按住CTRL的同时单击链接的新选项卡中使用。

答案 1 :(得分:3)

我已经尝试了我能找到的所有建议,包括这个问题的答案,但都没有奏效。 Kau-Boy's answer to this question对我不起作用(因为它注释了元标记和大部分第二个代码脚本块,然后js在');上中断,它会在注释关闭后尝试解释,即发生的情况:

<script type="text/javascript">
    document.write("<!-- ");
</script>
<!-- <meta http-equiv="Refresh" content="2;URL=js.html" /><script type="text/javascript"> document.write(' -->
<script type="text/javascript">
    ');
</script>

我从做了所做的事情中获取灵感,并将以下似乎有用的内容放在一起:

<script type="text/javascript">
    document.write('\x3Cscript type="text/javascript">/*'); 
</script>
<meta http-equiv="Refresh" content="0;URL=js.html" />
<script type="text/javascript">/**/</script>

基本上,如果启用了javascript,我们会得到3个脚本元素,其中一个是在javascript注释中被欺骗的元标记,因此它不会重定向。如果禁用了javascript,它所看到的只是它忽略的两个脚本元素,以及未被删除的元元素,因此它会重定向。

注意:如果你使用application / xhtml + xml内容类型提供你的页面(你可能应该这样做,我想,如果文档是xhtml),这将破坏浏览器中的js,因为write方法将通常被禁用。

答案 2 :(得分:2)

正如您所发现的,HTML4中无法解决此问题。但是,在HTML5中,noscript在head中是有效的,因此您可以使用HTML5进行验证。 (无论如何,HTML5验证器要比HTML4验证器好得多。)

但有一点需要注意:HTML5有一个突出的问题(ISSUE-117),它要求弃用noscript,所以HTML5到达最后一次调用时,noscript可能不再在HTML5中有效。