对于不支持JavaScript的访问者,我将其重定向到某个页面 - “js.html”。
为此,我在所有文件中都有以下内容:
<noscript>
<meta http-equiv="Refresh" content="0;URL=js.html" />
</noscript>
当然,这不会在XHTML中验证,因为noscript必须放在<body>
中。
但是当我将该代码放在我的文档正文中时,我得到了另一个错误,因为元标记只能在<head>
部分中使用,所以我在这里陷入无限循环。
有没有办法进行验证?它适用于所有浏览器,所以这不是什么大问题,我只是想验证我的应用程序。
答案 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中有效。