在头部添加noscript以包装重定向的有效方法

Ant*_*ony 21 html javascript xhtml noscript

所以我想一个简单的方法来处理浏览器禁用的javascript将如下:

<head>
        <title>JavaScript Test</title>
        <noscript>
                <meta http-equiv="Refresh"
                        content="1;url=nojs.html" />
        </noscript>
</head>
Run Code Online (Sandbox Code Playgroud)

并且具有nojs.html有类似:

<p>Return to <a href="jstest.html">test</a> after enabling javascrpt.</p> 
Run Code Online (Sandbox Code Playgroud)

在崩溃页面.

这不是我首选的方法,但它很好很简单,直到可以为没有javascript的用户设计出更优雅的东西.

但是,<noscript>在该head部分中放置一个元素是无效的.当然,初步测试仍然有效,但是当我的代码有效时,我很迷信,而且我讨厌实际上无法进行现场测试.

那么有一种有效的方法吗?也许包装noscript在另一个元素中,就像对象标签一样?或者更简单的一些我没想到的方式?

Dou*_*ner 24

我不确定为什么你需要重定向到另一个页面而不是只显示一条消息.我使用JS和一点CSS来处理这些情况.像这样的东西:

<head>
   ....
   <script type="text/javascript"> document.documentElement.className += " js"</script>

   <link rel="stylesheet" type='text/css' href="css/layout.css" media="all" />
</head>
<body>
    <div id="noscript">Please enable JavaScript, then refresh this page. JavaScript is required on this site</div>
    <div id="wrapper">
       ...
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

然后在layout.css:

 #wrapper      { display: none  } /* Hide if JS disabled */
 .js #wrapper  { display: block } /* Show if JS enabled */
 .js #noscript { display: none  } /* Hide if JS enabled */
Run Code Online (Sandbox Code Playgroud)

通过这种方式,在呈现页面之前将类应用于html元素,这样就不会因为替换JS内容的非JS内容而获得闪烁.

  • @mattalexx更多以保持一致.此外,很少有元素在`<noscript>`标签内有效,因此在这个例子中它将是一个很好的选择,但在许多情况下它不会. (5认同)

Spy*_*cho 6

Doug的解决方案相当不错,但它有一些缺点:

  • 在html元素上有一个class属性是无效的.相反,使用身体.
  • 它要求您知道要将元素设置为什么显示类型(即" .js #wrapper { display: block }").

使用相同方法的更简单,更有效和灵活的解决方案可以是:

<html>
    <head>
        <!-- put this in a separate stylesheet -->
        <style type="text/css">
            .jsOff .jsOnly{
                display:none;
            }
        </style>
    </head>

    <body class="jsOff">
        <script type="text/javascript">
            document.body.className = document.body.className.replace('jsOff ','');
        </script>

        <noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>

        <p class="jsOnly">I am only shown if JS is enabled</p>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

有了它,它是有效的html(html元素上没有类属性).它更简单(更少的CSS).它很灵活.只需将"jsOnly"类添加到您希望仅在启用JS时显示的任何元素.