问题标签 [graceful-degradation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
138 浏览

javascript - 是否可以在关闭 JS 的情况下使 AJAX 网站可抓取并优雅地降级?

根据此规范,使 Googlebot 可抓取 AJAX 站点意味着您必须在其中使用 hashbang (#!) 链接,这意味着当 JS 关闭时它不会优雅地降级(或在打开时逐渐增强)。这可能意味着在这种情况下,可爬取性和优雅降级/渐进增强是相互排斥的。事实上是这样吗?有什么可以做的吗?

注意:为了透明起见,我会注意到 Pro Webmasters 网站上也有人问过这个问题,但从纯程序化的角度来看,我认为它也很有趣。

0 投票
3 回答
505 浏览

android - 是否可以“优雅地降级”一个 android 应用程序?

我想知道是否可以在 Android 应用程序中使用优雅降级方法。即,使用 API 15 的某些功能,但如果不支持,请改用 API 10。

具体来说,我在 Android 4 中有“滑动标签”,而在 Android 2.x 中缺少对这个功能的支持(因此使用普通标签),但这个问题相当笼统。

我想在支持它的设备上使用高级功能,但当它不受支持时,我想使用替代方法。我似乎无法在 Android 2 项目中使用 Android 4 库,而 Android 4 项目将无法在 Android 2 设备上启动,这是可以理解的。

有什么解决办法吗?或者,至少就目前而言,Android 2 上的“滑动标签”有什么解决方案吗?

0 投票
1 回答
9814 浏览

image - 具有优雅降级的响应式、透明 CSS 图像标题?

在图像上创建响应式、透明的 CSS 标题的正确方法是什么——在旧浏览器中优雅地降级?

我正在努力实现:

  • 居中的垂直图像列
  • 图像的高度和宽度相等
  • 每个图像都有一个应该居中的标题
  • 字幕应具有透明背景
  • 如果在不支持透明度的旧浏览器中背景变黑就好了

如果你看一下这个 Fiddle 例子,它显然有很多问题。

HTML5 的基本前提是:

但是CSS3 代码是我们遇到问题的地方。这是正确的方法吗?我让它与一些微调(不包括在内)一起工作,但微调对我来说似乎没有语义意义。

例如,这是结果:

在此处输入图像描述

我感觉 CSS 在很多层面上都是错误的(双关语)。

0 投票
3 回答
362 浏览

javascript - 根据 HTML 中的浏览器类型确定要使用的超链接

我有一个网站,我嵌入了 lightview 以调出一个 iframe,其中包含 Google Voice 徽章。此徽章是基于 Flash 的,因此在 iOS 中看不到。为了在 iOS 中获取要拨打的电话号码,它必须具有不同的格式。

我的问题是如何向 HTML 添加逻辑以了解根据浏览器类型(移动设备与普通)选择哪种类型?

完整的浏览器支持:

移动浏览器支持:

0 投票
1 回答
206 浏览

css - 优雅降级的正确方法?

我有一个在 IE 中不起作用的 HTML 5 拖放游戏,所以我想基本上只是以图像的形式显示答案。目前,我正在使用 CSSdiv在 IE 中隐藏游戏并div使用display: block;显示图像并display: none在 Chrome 等浏览器上使用隐藏它。

这是一种基于浏览器切换内容的好方法,还是我应该考虑另一种方法?这样做的正确方法是什么?

0 投票
1 回答
243 浏览

php - 使用 PHP 的可降级 jquery ajax 表单 - 代码重复

假设我有一个我想提交的表格。我已经建立了它和表格action=""。因此,我可以通过以下方式访问发布的数据if(isset($_POST['something']))

示例 form.php(代码未检查,只是为了说明点):

现在,如果用户启用了 js,我希望使用 jquery/js 处理表单。

我知道该怎么做。但是,我在访问数据库时遇到问题,例如在 2 个 php 文件中运行相同的查询。我的原始表单页面中的一个,当 js 关闭并返回关联的数据数组时使用。然后我有一个 ajaxData.php 它返回 json 但基本上是相同的 sql 查询。

示例 AJAXDATA.php

在我看来,这是低效的,因为我正在编写相同的代码、相同的数据访问等......两次 - 一次用于 form.php,一次用于 ajaxdata.php。

我应该如何构建我的表单/文件,以便 ajax 使用与普通表单提交相同的数据库访问和 sql 代码?

0 投票
1 回答
217 浏览

rest - CakePHP 中的 REST 优雅降级

好吧,这里一个更好的标题可能是“CakePHP 中的 REST 渐进增强”,但至少现在我知道如果你的答案只是指两者之间的区别,你没有读过这个问题;)

我非常熟悉 REST 以及如何将它与 CakePHP 集成,但我并不是 100% 了解如何仍然维护一个常规功能的网站。使用 Router::mapResources 听起来是个好主意,但这会在维护站点的“优雅降级”版本方面产生问题,因为对 /resource/ 的 POST 请求和对 /resource/add 的 GET 请求都会路由到相同的操作(添加)。显然,如果他们使用的是 REST api,我希望此操作返回一个 JSON 对象,但如果他们使用的是网站的降级版本(可能没有 JS),它应该是一个添加表单,对吧?

处理这个问题的最佳方法是什么。您是否使用 Router::resourceMap() 将 REST 请求路由到其他操作名称?你有没有做过我看到的那种疯狂的黑客行为,有 /api/ 前缀部分的资源映射,所以你可以使用 api_action 函数?您是否通过检查 isAjax() 来处理 REST 和常规请求的操作?如果是这样,您如何确保可以依赖浏览器正确支持其他两种请求类型?

我已经搜索了很多,但没有找到任何关于如何在 Cake 中保持传统请求与 REST 一起可用的任何信息,所以如果有人有任何建议或经验,我很想听听!

0 投票
1 回答
425 浏览

html - 使用 HTML5 元素/ARIA 角色的首选技术

所以这是我时常思考的一个小问题。大约一两年来,我一直对使用 HTML5 元素的最佳方式感到好奇。

我看到的最常见的技术 - 除了类和 ARIA 角色之外,使用页眉、页脚、部分等元素。对旧版浏览器使用 html5shiv.js。

这更符合优雅降级而不是渐进增强。如果 JS 在较旧的移动/桌面浏览器中未启用/根本不可用,我们将失去对仅使用 HTML5 元素构建的布局进行样式设置的能力。

我见过的另一种方法更符合渐进增强,并且不依赖于在旧浏览器中启用 JS 以使布局正常工作。我已经与 Josh Clark[Global Moxie] 简单讨论过这个问题。他们在 m 中使用了这种方法。人物杂志版。http://www.people.com/people/mobile/home/他们使用 HTML5 元素来帮助勾勒文档的语义和带有样式类的 div。没有样式依赖于 HTML5 元素,如页眉、页脚、旁边、部分。

我的一个问题是,如果已经在 div 上设置了 ARIA 角色,那么在我的 div/spans 周围分层 HTML5 元素是否有益于为文档标记提供更好的轮廓?除了“语义化”之外,这还有什么好处?

如果在用于样式的 div 周围添加 HTML5 元素,将 ARIA 角色从 div 移动到 HTML5 元素是否有益?我假设它会,但希望获得有关此技术的更多反馈。

0 投票
1 回答
210 浏览

jquery - 设计一个使用 Ajax,但也关心 SEO 和优雅降级的 Play 框架

什么是使用 Play 设计 Web 应用程序的好方法,它提供了优雅的降级?我正在开发一个客户端应用程序,它使用 Ajax 获取部分视图,然后使用 JQuery 将它们放置到 DOM 中。

为了支持 SEO 和优雅降级,我应该创建一个重复的控制器方法,它将部分视图呈现为整个页面的一部分(包括页眉和页脚)。所以当我使用 Jquery 进行调用时,它将调用“item/12345 /partial”,它只会带来部分视图,但是当用户转到“item/12345”时,它应该显示整个页面,其中部分已经被卡住了。

第二个选项是避免使用第二个控制器方法,并始终返回整个页面内容(页眉、javascript、样式、部分和页脚)。当使用 JQuery 调用时,回调方法将仅剥离必要的 HTML 并将其放入 DOM。当然,这意味着从服务器返回的内容总是相同的,所以它确实降低了使用 AJAX 的优势。

你会推荐哪一个?

0 投票
2 回答
5658 浏览

angularjs - 具有渐进增强功能的基于混合页面/单页网络应用程序(Angularjs、Ember.js)?

我想知道是否有人找到了解决此问题的方法。有没有办法两全其美:

  • 建立一个基于页面的站点,具有永久链接、可访问性、SEO 和优雅的后备/渐进增强(基本上是 Web 开发的所有最佳实践
  • 并且,对于那些使用 javascript 的人来说,通过 ajax 加载内容的响应式前端体验,在导航底层站点页面时不会刷新页面,脚本/内容/css/等的冗余下载最少。(AngularJs 或 Ember.js 等客户端框架的所有好处)

我看到一些主要站点能够管理这个(gmail、stackoverflow),并且我看到Jeff 的新站点在 noscript 标记中构建了该站点的基本版本。

  1. 混合页面/单页面应用程序的解决方案是构建站点的两个版本,发送两个版本,然后让客户决定它可以显示哪个版本?(这就是gmail的作用吗?)
  2. 或者是 AngularJS 等人的问题。根本就没有设计为允许优雅降级?

认为#1是答案,这让我的大脑感到痛苦。

(我专注于 AngularJs 的原因是我喜欢它对 html 模板、声明式样式的支持以及它尝试修复 js 范围的尝试。Ember 和其他框架也非常出色;也许其中一个更适合混合站点?)