拒绝没有启用 javascript 的浏览器使用我的 php 网站

Posted

技术标签:

【中文标题】拒绝没有启用 javascript 的浏览器使用我的 php 网站【英文标题】:deny browsers without javascript enabled to use my php site 【发布时间】:2009-01-26 09:30:37 【问题描述】:

我正在用 php 编写一个相当小的 Web 应用程序,并打算使用 DOJO 使其“花哨”,并且很可能在客户端处理一些验证(也会有服务器端验证)。

我想让 javascript 成为我的网站的一项要求,因此,如果用户的浏览器禁用了 JavaScript,或者不支持 JavaScript,他们应该根本无法使用该网站,并收到一条消息将此要求通知他们。

我见过其他网站这样做,但我不知道如何执行它。 例如,尝试使用 username=user 和 password=user 在此处登录http://demo.actitime.com/login.do?username=user

然后我希望在每个页面上都发生同样的事情。

任何帮助表示赞赏。

奥奇索

【问题讨论】:

这个问题更贴切地命名为“我如何创建一个全面的可用性灾难?” 如果您的网站提供任何类型的付费服务,根据当地法律,这样做很可能是非法的。 要求 Javascript 是非法的,特别是如果它是您服务条款的一部分? @cletus 它与 ToS 无关(无论如何这都是可疑的合法性),它与需要特殊软件来帮助他们使用网络的残疾人有关。故意不合作是歧视性的。 【参考方案1】:

我不认为这是一个明智的做法。

只需在网站上多加一点努力,这样没有 javascript 的用户也可以访问该网站。不要忘记他们是您的客户。他们可能有充分的理由禁用 javascript。

【讨论】:

尽管如此,这正变得越来越普遍。禁用Javascript,去www.cnn.com然后点击一些文章。 好吧,即使其他人做错了事,也没有理由自己做错。 谁说错了?不管你喜不喜欢,Javascript 正在成为一项基本要求。因此,Web 开发人员将越来越需要它,而不是花时间和精力担心越来越少的没有它或禁用它的人会发生什么。 随着基于 XSS 和 XSRF 的安全问题的迅速增加,JavaScript 也很可能变得不可接受,不管你喜不喜欢。因此,用户将越来越多地禁用它,而不是像他们的表亲那样冒着被清空银行账户的风险。 是的。不支持 noscripts 是设计的失败,并且作为开发人员的扩展。 OP 应该重新审视他的假设,而这个答案会引导他这样做。【参考方案2】:

你知道,这一年是 2009 年,而不是 1997 年。这些黑客属于过去,死了,埋葬了。

至于有用的答案:阅读gracefuldegradation。

至于您的答案:CSS 可以完成您使用 DOJO 所做的事情,而无需 Javascript(至少,您提到的事情)。如果未启用 javascript,它将需要往返服务器,仅此而已。我不知道你所说的“逻辑”是什么意思,但是这个术语的规范意义最好用 PHP 和可能的模板系统来完成,而不是使用 javascript。

没有往返的输入验证很好,但如果我没有 javascript 或无法使用它,服务器验证比 no-frickin-site 更好。

是的,真的那么糟糕。

编辑:Colonel Sponsz 指出another useful link about graceful degradation。

【讨论】:

作为 WEB 2.0 时代(不是 1997 年),使用 AJAX 的东西越来越多,当然越来越需要 javascript。我觉得你很粗鲁。 相反,可访问性现在得到了更广泛的理解——您不需要 Javascript 来完成工作。 @Adriano - 无论如何都需要对所有输入进行服务器端验证(客户端可以被简单地绕过)所以这不会是更多的工作。 @dtsazza:哦,当然,而且 occhiso 说它也会被实施。我只是从用户的 POV 中查看它。我知道,其中包括绕过仅 js 验证的黑客。 @occhiso:我想清楚。你提到的例子是bad的例子。我不是在称为黑客。我是说这种编程属于六英尺以下。如果你不知道,没关系。没有人天生就知道。 输入验证并不是一个很好的例子,因为无论有没有客户端输入验证,您都不应该信任它,并且无论如何都应该在服务器上对其进行验证。【参考方案3】:

我想到了两件事:

对内容使用<noscript>标签;和

对于该网站和类似的功能,使用带有 onclick 处理程序的普通按钮,而不是提交按钮:

在没有启用 Javascript 的情况下无法提交。

【讨论】:

按回车仍然会提交,不是吗? 我确实这样做了,但是使用 firebug 插入提交按钮非常容易。不过,感谢您的想法,我认为您是这里唯一认为这没问题的人 - 谢谢。 如果你问一群“专家”,除了一个人之外,每个人都说“你想要的这个东西因为这个那个而不好”,我认为假设每个人都不是很合理错了,但你和这个人。 当然,只要有足够的时间和金钱,一切都可以完成。这并不意味着这是一件明智或好事。这就是 thedailywtf 诞生的原因。 weblogs.asp.net/alex_papadimoulis/archive/2005/05/25/… 解释得比我想的要好。应该是必读的。【参考方案4】:

对此唯一适当的回应是:“你为什么要这样做?”

确实,更好的方法是先尝试使其工作,然后再添加花哨的 javascript 位。这样,禁用了 javascript 的用户仍然可以使用它,即使它的功能有限。

【讨论】:

【参考方案5】:

只需在您的页面中放置一个脚本,通过使用 Ajax 将数据重定向或提交到启用该变量的页面,在访问您网站的浏览器中启用会话变量。在下一次单击 y 中,会话没有会话变量,您将其重定向到另一个页面,该页面请求启用 JavaScript 的浏览器。

【讨论】:

【参考方案6】:

一些高级用户默认禁用 JavaScript,并在每个网站的基础上启用它。我只是警告他们需要 JavaScript 才能走得更远。用于在没有 JS 或禁用 JS 的浏览器上显示文本:

<noscript>
    <p style="color: Red;">Warning: JavaScript is required to display anything after you login. Please enable JavaScript or use a different browser</p>
</noscript>

【讨论】:

【参考方案7】:

一个原因是我想要一个选项卡式界面 - 它允许以不同的方式完成相同的任务。 “每个选项卡”使用了很多相同的逻辑,所以我不想将它分成单独的页面。

使用 dojo,我可以很容易地实现这一点,方法是让所有内容在同一页面上都是单独的 div,然后 dojo 将每个 div 放在它自己的选项卡中。 如果没有 JavaScript,您将一次看到所有选项卡(div)。

有一些像这样的小问题,我认为把它作为一个要求,它总是表现得很好,看起来很好,没有 JavaScript 的人会错过,记住这绝不是一个关键任务站点!

另外,这意味着我可以强制执行输入验证,而无需用户重新加载页面。

真的有那么糟糕吗?

【讨论】:

不,没那么糟糕。其实是可以理解的。 是的,这绝对是那么糟糕。你是在告诉人们“如果你想使用我的网站,我希望你打开自己的安全漏洞,这可能意味着你的银行账户被清空。如果你有视力障碍,我也不希望你在这里!” 没有 javascript 的人可能会认为他们更喜欢一个损坏的网站,而不是根本没有网站。我会说,如果没有 javascript,“没有 javascript 将无法工作,风险自负” - 警告将是最好的解决方案,但无论如何都可以尝试。 我不会一次加载所有 div,而是使用 ajax,并且我会支持直接链接到每个选项卡。这样,人们可以在浏览器的单独选项卡上打开这些链接,并且无需 javascript 也能看到它们。是的,这很糟糕。 如果您没有足够的时间让您的网站至少对 javascript 有用,那么我不会花时间将其添加到我的 noscript 允许列表中。【参考方案8】:

我能想到的最好的理由是阻止人们在没有基于 Java 脚本的浏览器的情况下访问和使用表单,从而躲避计数器。

例如,如果有人决定发送垃圾邮件,即使使用验证码并通过不启用 javascript 来隐藏他们的 isp,(很多计数器都依赖它),那么我认为在网站上禁止所有非 javascript 浏览器是个好主意.

其实我想我会的。

好主意'occhiso'。

【讨论】:

我可以通过禁用javascript来隐藏我的ISP?你真的确定吗?

以上是关于拒绝没有启用 javascript 的浏览器使用我的 php 网站的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Javascript 启用浏览器 cookie? [复制]

如果浏览器中未启用javascript,则显示消息

浏览器内地理定位功能:如何在用户拒绝后提示用户重新启用?

使用 javascript 或 jQuery 检测用户是不是拒绝浏览器定位计算机的请求

启用 CORS 的服务器不拒绝请求

本网站需要在您的浏览器中启用 Javascript