当用户未启用JavaScript时,最好的做法是什么?向这类用户提供内容的最佳方式是什么?保持网站可供搜索引擎阅读的最佳方法是什么?
我可以想到两种方法来实现这一点,但不知道什么是更好的(或者如果第三种选择更好):
我也很欣赏有关正确或错误方法的高调例子。
---------问题的补充-----------
以下是我过去为解决此问题所做的一个示例:http://photocontest.highpoint.edu/
我想确保没有更好的方法来做到这一点。
答案 0 :(得分:4)
您正在谈论优雅降级:设计并使网站使用javascript,然后使网站仍然可以使用javascript关闭。最简单的方法是在页面顶部附近的某处包含html“noscript”标记,该标记会显示网站需要javascript或其他内容无法正常工作。 SO就是一个很好的例子。屏幕顶部的大多数按钮都是通过javascript运行的。把它关掉,你得到一个漂亮的红色横幅,下拉的js效果消失了。
我更喜欢渐进式增强开发。无需javascript / flash / css3 /无论如何让网站全部工作,然后一点一点地增强它(仍包括noscript标签)以改善用户体验。这确保您拥有一个完全可以工作,可读的网站,无论您是否是使用屏幕阅读器或搜索引擎的残障用户,同时为使用较新浏览器的用户提供良好的用户体验。
底线:对于任何动态生成的内容(例如通过AJAX生成的页面元素),必须有一个静态页面替代方案,其中必须通过标准链接提供此内容。如果您使用javascript作为标签内容,则以与网页其余部分一致的方式显示所有内容。
一个例子是http://www.bbc.co.uk/news/关闭javascript,你有一整页的书面内容,图片,链接等。打开javascript,你可以滚动新闻报道,标签内容,滚动图片等等。
我会变得顽皮并发布维基百科的链接:
答案 1 :(得分:1)
你有另一种选择,只需加载同一页面,但让它适用于noscript用户(渐进增强/优雅降级)。
一个简单的例子:
您希望使用ajax将内容加载到div中,使用新内容(noscript行为)将<a>
标记链接到整个页面,并使用jQuery绑定<a>
标记以拦截点击并使用ajax加载(脚本行为)。
$('a.ajax').click(function(){
var anchor = $(this);
$('#content').load(anchor.attr('href') + ' #content');
return false;
});
答案 2 :(得分:1)
我不完全确定渐进增强是否被认为是最佳实践,但这是我个人青睐的方法。在这种情况下,您编写服务器端代码,使其功能类似于标准Web 1.0 Web应用程序(无JavaScript),以提供至少足够的功能,使系统无需JavaScript即可运行。然后,您可以在此基础上开始分层JavaScript功能,以使系统更加用户友好。如果操作正确,您应该最终得到一个Web应用程序,该应用程序至少提供足够的功能以对非JavaScript用户有用。
一个相关的过程被称为Graceful Degradation,它以类似的方式工作,但首先假设用户启用了JavaScript,并为他们不做的情况建立了变通方法。但是,这有一个缺点,如果你忽略了某些东西,你可以留下非JavaScript用户而不会有后退。
搜索页面的渐进增强示例:构建搜索页面,使其通常只返回搜索结果的HTML页面,还添加一个可以通过GET设置的标志,在设置时,它会返回XML或JSON。在搜索页面上,包含一个脚本,该脚本对搜索页面执行AJAX请求,并在查询字符串后附加标志,然后使用AJAX调用的结果替换页面的主要内容。 JavaScript用户可以获得AJAX的好处,但没有JavaScript的用户仍然可以获得可用的搜索页面。
答案 3 :(得分:1)
如果您的应用程序必须让javascript运行,那么除了在noscript标记中显示礼貌消息之外,您无能为力。
否则,你应该反思。
因此,如果用户没有JS,您的网站仍会恢复到您网站状态的第二步。
至于爬行。如果您的网站依赖于AJAX和许多JS工作,您可以让gogole意识到它:http://code.google.com/web/ajaxcrawling/docs/getting-started.html
答案 4 :(得分:1)
一个可以帮助您的快速提示:只需安装lynx,一个命令行Web浏览器,您就会立即看到谷歌和其他搜索引擎优化的网站(以及盲人)。这非常有用。当然,在命令行窗口中,没有图形,javascript被禁用。
答案 5 :(得分:1)
如果您正在进行“严肃”的Ajax(例如客户端路由),以下技术可能会有用:
我在研究“如何编写正确的Ajax代码”时找到的链接的一个很好的示例代码:
<a href="/path/to/resource" onclick="Routing.navigate("/path/to/resource"); return false;">Resource</a>
这当然是一个非常复杂的解决方案,但它应该启用SEO(包括非搜索引擎爬虫)和可访问性。问题是您必须能够呈现页面服务器 - 和客户端。
一种解决方案可能是使用像胡子这样的模板框架,其中存在不同平台的实现。
这是我迄今为止发现的最佳通用设计。您可以深入链接到您的应用程序,它的搜索引擎友好,它应该强制您构建一个优雅降级的页面。
P.S。:上述技术的一个优点是,Ajax和“Web 1.0” - 页面的渲染都可以从整个pagelet的memcached缓存中获益。
答案 6 :(得分:0)
我更喜欢在没有javascript的情况下对页面进行编码,然后如果启用了javascript,我们会将用户重定向到使用javascript的类似页面。 (与渐进增强相同的概念)