7

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

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

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

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

有没有办法使这个验证?它在所有浏览器中都能正常工作,所以没什么大不了的,我只想验证我的应用程序。

4

3 回答 3

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 的同时单击链接的新选项卡中使用。

于 2010-08-31T23:10:41.403 回答
3

我已经尝试了所有我能找到的建议,包括这个问题的答案,但没有一个奏效。Kau-Boy 对这个问题的回答对我不起作用(因为它注释掉了元标记和第二个代码脚本块的大部分内容,然后 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 方法.

于 2012-12-05T16:27:40.697 回答
2

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

但有一个警告:HTML5 有一个突出问题 ( ISSUE-117 ) 要求弃用 noscript,因此当 HTML5 到达最后一次调用时,noscript 可能在 HTML5 中不再有效。

于 2010-08-31T23:32:31.587 回答