为javascript脚本支持而不是支持设计网站

时间:2009-08-16 17:55:23

标签: javascript jquery html progressive-enhancement graceful-degradation

好的,我知道您的网站在禁用javascript的情况下正常运行非常重要。

在我看来,开始考虑如何设计此类网站的一种方法是在主页上检测javascript,如果没有启用,则重定向到另一个版本的网站,该网站不是javascript代码并且使用纯HTML(如gmail)< / p>

我想到的另一种方法是,例如在网页上的对话框中考虑X(关闭按钮)。如果在没有任何javascript干扰的情况下按下X会导致向服务器发送请求,而在服务器端我们在下次渲染页面时隐藏该对话框,并且我们还将javascript函数绑定到链接的onclick,如果是启用JavaScript后,它会立即隐藏对话框。

你怎么看待这个?你会如何设计一个支持两者的网站?

6 个答案:

答案 0 :(得分:12)

解决这个问题的一种方法是:

  • 首先,创建网站,不带任何javascript
  • 然后,当每个工作时,在适当的地方添加javascript增强功能

这样,如果JS被禁用,该网站的“第一”版本仍然有效。

你可以用CSS完全一样,自然 - 每天甚至有一个“CSS Naked Day”,显示没有CSS的网站是什么样的^^


一个例子?

  • 您有一个标准的HTML表单,在提交时将数据发送到您的服务器,服务器重新创建页面会显示“感谢订阅”等消息
  • 然后添加一些JS + Ajax:在提交表单时不是重新加载整个页面,而是执行Ajax请求,只发送数据;并且,作为回报,它显示“感谢订阅”而不重新加载页面

在这种情况下,如果禁用了javascript,则第一种“标准”处理方式仍然有效。

这是Progressive enhancement

的(部分)

答案 1 :(得分:2)

通常的方法是所谓的progressive enhancement

基本上,您需要一个简单的HTML网站,其中包含常规表格 下一个增强功能是CSS - 你让它看起来很好 然后你可以使用Javascript进一步增强它 - 你可以添加或删除元素,添加效果等等。

基本HTML总是适用于旧版浏览器(例如带有脚本拦截器的浏览器)。

例如,发表评论的表单可能如下所示:

<form action="post-comment.php" method="post" id="myForm">
<input type="text" name="comment">
</form>

然后你可以使用javascript来增强它以使其成为AJAXy

$('#myForm').submit(...);

理想情况下,AJAX回调应该使用与post-comment.php相同的代码 - 通过调用相同的文件或通过include,然后您不必重复代码。

答案 2 :(得分:2)

最好的方法是设计一个没有JS就能充分发挥作用的页面。然后添加一个&lt; script&gt;阻止在&lt; body&gt;的底部代码如下:

window.onload = function() {
    // Do DOM manipulations to add JS functionality here.  For instance...
    document.getElementById('someInputField').onchange = function() {
        // Do stuff here that you can't do in HTML, like on-the-fly validation
    }
}

研究jQuery示例。他们展示了很多像这样的东西。这被称为“不引人注目的JavaScript”。谷歌为此寻找更多的例子。

编辑:上面的jQuery版本是:

$(document).ready(function() {
    // Do DOM manipulations to add JS functionality here.  For instance...
    $('#someInputField').change(function() {
        // Do stuff here that you can't do in HTML, like on-the-fly validation
   });
});

我添加这个只是为了显示jQuery与标准DOM操作的较低级别。 window.onload和document.ready之间存在细微差别,在jQuery文档和教程中进行了讨论。

答案 3 :(得分:2)

使用渐进式增强功能,研究jquery以了解它。你需要花一些时间来解决它。例如你的想法:

  

在主页上检测javascript   如果它没有启用重定向到   这样做的另一个版本的网站   不是javascript代码并且可以使用   纯HTML

你如何检测javascript是否被禁用?没有javascript,显而易见......

你正在考虑错误的方法:最基本的版本必须是默认版本,然后,如果你检测到更高级的功能,你可以使用它们。

尽可能避免为不同的弓箭手/能力避免单独的版本。要让所有版本保持同步并保持最新状态,这需要做很多工作。

一些很好的资源可以帮助你入门:

答案 4 :(得分:2)

对于禁用JavaScript,使您的网站正常运行并不重要。禁用JavaScript的人是那些想要破解网站漏洞的人,他们不值得正确导航。不要浪费你的努力。没有JavaScript,每个人都知道Web是不可能的。

唯一需要注意的是表单:不要相信JavaScript中的过滤器,始终在服务器端再次过滤它,总是!

答案 5 :(得分:1)

你的目标是progressive enhancement。我首先设计没有JavaScript的网站,一旦它工作,就开始通过jQuery这样的库添加你的JavaScript事件,这样网站的行为就完全独立于演示了。这样,您可以为在浏览器中启用了JavaScript的用户和不在浏览器中启用JavaScript的用户提供更高级别的功能和润色。