【问题标题】:Javascript disabled best practices? [closed]Javascript禁用最佳实践? [关闭]
【发布时间】:2011-11-23 09:10:09
【问题描述】:

我想知道如果用户禁用了 Javascript,是否有人会优化他们的网页以获得一些友好的行为。在这种情况下是否有任何技巧可以提供一些伪脚本行为?我说的是基本的东西,比如在新窗口中打开链接。我想如果没有 Javascript,你仍然可以做很多事情。在某些情况下,拥有可以依赖的某些功能的页面可能会很方便。有什么做法吗?

编辑:到目前为止,答案很好!人们会介意包含一些示例代码(来吧,HTML 太简单了!),因为我认为我还没有在 SO 上看到过这样的问题。

【问题讨论】:

    标签: html cross-browser javascript


    【解决方案1】:

    我有时做的是将需要 Javascript 的功能设置为不显示,然后使用 Javascript 使它们显示。这样,没有 Javascript 的人就不会看到他们无法使用的功能。然后在<noscript>标签中加入替代功能。

    【讨论】:

    • 想告诉我你为什么不赞成我吗?
    【解决方案2】:

    要在新窗口中打开链接,您可以使用 target="_blank"

    <a href="http://www.google.com" target="_blank">Google</a>
    

    在我工作的地方,我们使用登录页面来确保(在一定程度上)他们在进入应用程序之前启用了 Javascript...

    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>Please Wait...</title>
      </head>
      <body>
        <h1>Please Wait....</h1>
        <noscript><h1>You need a JavaScript-enabled browser to use this application!</h1></noscript>
        <script type="text/javascript">
          <!--
            location.href = "FrontPage.aspx";
          // -->
        </script>
      </body>
    </html>
    

    另外,我经常对how powerful CSS can be 感到惊讶。

    【讨论】:

      【解决方案3】:

      Stackoverflow 很好地处理了这个问题。该网站完全可以在没有 Javascript 的情况下使用,可以提出问题并回答问题。投票等高级功能不起作用。

      您必须在您愿意花费的时间使网站在没有 Javascript 的情况下可用的时间和必须工作的功能数量之间找到一个折衷方案。

      【讨论】:

        【解决方案4】:

        您可以使用

        【讨论】:

          【解决方案5】:

          当您使用 Javascript 从链接打开窗口时,可以将其设置为透明,以便在禁用 Javascript 时返回到链接的原始行为:

          <a href="http://www.guffa.com" target="_blank" onclick="window.open(this.href,this.target,'width=900,height=700');return false;">Guffa</a>
          

          如果启用了 Javascript,onclick 事件将捕获点击并打开一个窗口,然后它从该事件中返回 false,以便不跟随链接。如果 Jasvascript 被禁用,将改为使用该链接。

          【讨论】:

          • +1 有些人可能会质疑打开新窗口,但您的解决方案是我在需要/需要时选择的解决方案。请注意,用户仍然可以控制他们的浏览器,并且可能会禁止任何新窗口,而是在新选项卡甚至同一窗口中打开 URL。
          【解决方案6】:

          “我想你仍然可以在没有 Javascript 的情况下做很多事情” - 有趣的是,不久前我们在没有 javascript 的情况下完成了所有事情

          最好的方法是所谓的“渐进式增强”。原则是制作一些无需 JavaScript 即可工作的东西,然后通过将 JavaScript 绑定到对象来对附加行为进行“分层”。诸如 jQuery 之类的库使这一点变得简单,因为它们支持 CSS 样式的选择器。这样您就可以应用几乎与应用 CSS 相同的方式来应用 JS 行为(好吧,有点夸张)。

          需要考虑一下什么是好的基线以及应该如何更改页面。

          通常真正的额外工作是在服务器端,您可能需要拥有多个请求处理系统。在一个小小的回应中解决这个问题有点大!

          此外,值得考虑的是用户不使用 JavaScript 的原因和原因。 Here's something I wrote a while ago on the subject你有兴趣吗。

          举个例子?举个简单的例子,例如。当用户将鼠标移动到表单字段时,您希望通过表单字段显示漂亮的“工具提示”。在 HTML 中,这些可以(例如)标记为段落:

          <label for="username">User name</label><input type="text" id="username" />
          <p>Username must be between 6-8 characters</p>
          

          对于非 JS 用户,提示可以简单地显示为一个漂亮的段落。所以你用 CSS 来设计它。为 JS 用户提供额外的 CSS,默认隐藏段落。所以:两套 CSS,一套覆盖另一套。

          非 JS:

          form p {
              margin: 10px 0 0 0;
              border-bottom: 1px solid grey;
          }
          

          js:

          form p {
              position: absolute; display: none;
              width: 180px;
              background-image: url(nice-bubble.gif);
              padding: 10px;
          }
          

          如何在 JS/非 JS 情况下应用 CSS 取决于您。有很多选择。就个人而言,我喜欢在 CSS 中为 JS 编写代码,并在标签中有一个 noscript.css 变体(即向后工作)。这不是有效的 XHTML,但效果很好。

          然后,有一些 JS 来查找元素并管理工具提示的显示代码。例如:

          $(document).ready(function() {
              $('form input').focus(function() {...display paragraph...});
              // etc;
          })
          

          这是伪造的代码,但你明白了。你最终得到的是 1 组 HTML,有 2 个演示文稿和其他行为,并且没有 JS 纠缠在你的 HTML 本身中。

          【讨论】:

            【解决方案7】:

            禁用 Javascript 的人也可能会修剪 CSS、Java 和其他“演示”功能,以节省低功率浏览器的处理能力。 (例如,网络电话或较旧型号的计算机。)您可以通过向服务器添加简单的功能来缓解这种情况,就像他们在 CGI 时代所做的那样 (random intro here)。在这种情况下,您的服务器可以将非 JS 用户重定向到 GET/POST 页面版本。我也会让响应尽可能简单和朴素,因为您可能会输出到一个小屏幕。

            【讨论】:

              【解决方案8】:

              Here's a question (and another) 对于构建一个优雅地处理禁用 JavaScript 的网站有很多(不同的)意见。

              【讨论】:

                【解决方案9】:

                jQuery 真的很有帮助。很多时候使用大型 JavaScript 插件(选项卡、工具提示等),您以非常语义化的方式编写标记。

                示例: 选项卡插件要求您创建锚定的 div,即

                <a href="#Preferences">Preferences</a>
                <a href="#Tools">Tools</a>
                <div id="Preferences">
                   blah
                </div>
                <div id="Tools">
                   bar
                </div>
                

                这在语义上是有意义的,并且没有选项卡插件,您可以获得一些功能。但是,当您启用 javascript 和 jquery-tabs 时,您会得到一个非常漂亮、丰富的界面。

                正如其他人所指出的,这实际上只是渐进式增强。编写语义标记,用 CSS 增强它,然后用 Javascript 增强它。你最终应该得到适合所有人的东西,甚至是 lynx 用户。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-04-14
                  • 2014-01-09
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-02
                  • 2010-10-06
                  • 2011-10-28
                  相关资源
                  最近更新 更多