2010-06-04 61 views
3

假设我正在开发一个严重依赖于JavaScript的Web应用程序,并且所有POST命令都使用AJAX来存储数据等。如何处理可能关闭JavaScript的浏览器?

应该如何处理那些用户可能关闭JavaScript的情况?要求用户的浏览器启用它是不合理的吗?这些情况是否有最佳做法?

+2

看到这个:http://stackoverflow.com/questions/822872/do-web-sites-really-need-to-cater-for-browsers-that-dont-have-javascript-enabled – goric 2010-06-04 02:24:48

回答

6

使用<noscript>标签让用户知道他们不能使用没有Javascript的网站。这不是最好的做法,但是在这一点上很常见,没有它的大多数用户都会在雨中被抛弃。这就是说,如果你可以提供一个不需要Javascript的网站版本(想想gmail的降级版本),那显然是一个优秀的解决方案。没有它,你将失去移动冲浪者,盲人和其他无障碍需求的人。那些太固执的人使用JS,但我们不关心他们。

+0

+1:noscript标签是必须的。但如果可能的话,如果没有脚本,尽可能给他们一个有用的品味。 – Pat 2010-06-04 02:29:03

+0

注意:自回答以来,移动用户现在拥有完全有用的浏览器,并且Magento拥有移动版本。 – 2012-08-25 11:34:01

4

我个人认为这不是一个期望人们开启Javascript的需求。

如果你不想支持非JavaScript,它是非常简单:

<noscript> 
    This site works better with Javascript turned on. 
</noscript> 

接近顶部。

如果你仍然想支持没有Javascript的用户,你可以构造你的Javascript,这样如果JS没有加载,所有的表单仍然提交到正确的位置。

举例来说,如果你有一个表格:

<form action="" method="POST"> 
    <input type="text" name="name"> 
    <input type="submit"> 
</form> 

不要与您正在使用Javascript的想法构建实际的形式。相反,只需挂钩页面以增强体验。

通常情况下,上述表单会提交给自己。使用Javascript,您可以挂钩并通过AJAX而不是新的页面加载进行提交。

+0

我正在考虑处理双重提交(如果没有JS,Ajax,如果有的话)。我很高兴看到这不仅仅是一个杂凑。也许我会首先使用noscript标签来制作ajax,然后再添加一个无JS版本。 – Cuga 2010-06-04 02:59:32

+1

你会有更多的成功,尽管最初的开发将花费更长的时间,如果你在没有JS的情况下研究如何做到这一点。如果没有,你可能不得不在整个地方进行破解,才能在没有AJAX的情况下运行。 – 2010-06-04 03:07:46

+0

我可以看到。幸运的是,我们使用了3周冲刺的Scrum流程,所以现在继续使用Ajax并没有太大的好处,然后在下一个冲刺阶段做出转换我们5种形式的任务。 – Cuga 2010-06-04 13:47:41

2

这里的关键是“优雅退化”的概念。尽管没有javascript支持,但您想尽可能提供尽可能好的体验。对于AJAX来说,这通常意味着制作全页面请求,而不是我们习惯的可爱动态页面; POST同样需要通过HTML提交并加载一个新页面。

这显然不是功能丰富,并且很好地展示它可能是一个挑战,但如果您正在寻找最佳实践,那就是目标。同样值得通过noscript标签告诉用户他们已禁用JavaScript(某些人可能已经合法地这样做了),但是由于缺少javascript而关闭整个网站并不是友好的行为。

任何有价值的网站都值得访问。

+0

为了让您的网站上的每个AJAX表单也能够按照惯例提交,需要大量工作。我确信,这些理论上的非JS用户大多是虚构的,并且不太真实。只有最古老的手机不支持JS。该切断电源了。 – 2010-06-04 04:15:04

+0

有数百万个虚拟网站只能在一两个最新的浏览器上正常运行 - 作者自己可能会占据大部分页面浏览量,因此脚本只适用于他们。 互联网上有值得浏览内容的站点为其用户的使用和便利添加了脚本增强功能,而不是简化脚本粘贴。 – kennebec 2010-06-04 04:42:26

+0

@beamrider这当然并不总是符合时间表,但我认为这仍然是要争取的。可访问性是现代Web开发的重要组成部分,忽视它只是因为它不方便,对于只支持数量有限的JS的屏幕阅读器等设备不公平。 – 2010-06-04 04:51:54

1

取决于网站;例如,像Google Maps这样的东西,显然只有在没有Javascript的情况下才能运行。因此,简单地显示一个无脚本元素礼貌地提及他们将需要它来查看该网站是好的。

可能最好避免任何光顾“你需要得到一个新的浏览器”的消息;他们可能无法出于多种原因,或者可能只是选择安装NoScript或类似软件。据Mozilla称,NoScript已近70 million downloads;显然这些人中的很大一部分将会为同一人重复下载,但是安装它的人可能容易达到1000万人 - 这并不重要。

我猜,如果可能的话,“最佳做法”应该是有一个优雅的降级版本。由你决定是否值得这个努力,或者它是否适合你的网站。

0

您可以通过action属性发送表单数据。当JavaScript打开时,使用removeAttributesetAttribute删除该属性。这样,当非JS用户使用浏览器时,他们仍然可以提交表单。但是,在后端代码中,您还必须支持非JS,这比使用<noscript>no-js(Mordenizr)更好。 当然,这样做还是有一些缺点的,比如你每次都需要重新加载整个页面,这会消耗很多时间和记忆。
到目前为止,这是我们能做的最好的解决方案。希望你喜欢它。