21

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

<head>
        <title>JavaScript Test</title>
        <noscript>
                <meta http-equiv="Refresh"
                        content="1;url=nojs.html" />
        </noscript>
</head>

并且nojs.html有类似的东西:

<p>Return to <a href="jstest.html">test</a> after enabling javascrpt.</p> 

在崩溃页面。

这不是我的首选方法,但它既好又简单,直到可以为没有 javascript 的用户解决更优雅的问题。

<noscript>但是,在节中放置元素是无效的head。当然,初步测试仍然有效,但是当我的代码有效时我很迷信,而且我讨厌这实际上无法通过现场测试。

那么有没有有效的方法来做到这一点?也许将其包装noscript在另一个元素中,例如对象标签?或者我没有想到的更简单的方法?

4

6 回答 6

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>

然后在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 */

通过这种方式,在呈现页面之前html将类应用于元素,因此当非 JS 内容被替换为 JS 内容时,您不会出现闪烁。

于 2010-02-16T03:48:42.343 回答
6

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

  • 在 html 元素上具有类属性是无效的。相反,使用身体。
  • 它要求您知道将元素设置为哪种显示类型(即“ .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>

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

于 2011-06-03T10:27:14.840 回答
4

<noscript>标签不能在 中,<head>它必须在<body>

通常的做法是显示一条消息而不是重定向,因为只有在禁用 javascript 时才能重定向。

你可以反过来做,让第一页是 nojs.html,然后在那个页面上使用 javascript 重定向到主要内容。

于 2010-02-16T03:51:18.203 回答
0

关于什么:

noscript{
z-index:100;
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
min-height:1024px; background:#FFF;
}

和:

<noscript>
<p>Please <a href="no_js_instructions.php">enable Javascript</a> on your browser.</p></noscript>
于 2011-10-13T09:12:27.853 回答
0

如果您真的想要一种有效的方法来做到这一点,请将您的nojs.htm主页设为页面并使用 JS 在向用户显示之前隐藏所有内容,并立即使用 javascript 重定向到真正的主页。

于 2010-02-16T03:46:30.227 回答
0

我喜欢 Doug 的解决方案。但是,如果您需要重定向,我会记住,虽然有规范和标准,但网络浏览器的世界是一个肮脏、不完美的世界。规范是否允许某些东西并不像它是否适用于您关心的浏览器那样重要。

只要看看任何主要网站的源代码......他们中的大多数人都不会验证我敢打赌:)

于 2010-02-16T05:25:12.893 回答