我有一个站点的一部分,其中包含多个类别的小部件。每个类别名称都有一个菜单。对于启用了 Javascript 的任何人,单击一个类别都会在页面中显示该类别的内容。他们可以随意在类别之间单击,根据需要查看 DOM 更新。该 url 也使用标准哈希/hashbang 更新(如果我们对 Google 友好)。因此,对于登陆 example.com/widgets
的用户,他们可以导航至 example.com/widgets#one
、example.com/widgets#two
、example.com/widgets#three
等
然而,为了支持没有启用 Javascript 的用户代理,跟随这些类别链接之一必须加载一个显示类别的新页面,因此对于没有启用 javascript 的人,他们将导航到 example.com/widgets/one
, example.com/widgets/two
, example.com/widgets/three
等
我的问题是:当有人启用了 Javascript 访问其中一个 URL 时会发生什么?例如,当登陆 example.com/widgets/one
时,启用了 Javascript 的人应该看到什么?是否应将它们重定向到 example.com/widgets#one
?
请注意,我需要为启用了 Javascript 的任何人提供单页面站点体验,但我想要为没有 JavaScript 的用户代理提供多页面站点体验。任何不解决这个事实的答案都不能回答问题。我对 hashbang 或单页站点与多页站点的优点或问题不感兴趣。
最佳答案
这就是我的结构:
使用HistoryJS来管理 URL。 JS pushstate 浏览器获得完全正确的 URL,而 JS 非 pushstate 浏览器获得散列 url。非 JS 用户正常访问完整 URL 并重新加载页面。
当用户点击链接时:
如果他们有 JS: 所有对其他页面的点击都由防止默认操作的功能处理,获取 HREF 并将 URL 传递给 ajax 请求并同时更新 URL。然后解析该 ajax 请求的 http 响应,然后加载到内容区域。
非 JS: 页面正常刷新并加载整个文档。
当页面加载时:
使用 JS:将事件处理程序附加到您的所有链接以防止出现默认情况,以便通过 Ajax 处理它们的 href。
没有 JS: 没有。允许 anchor 正常工作。
我认为您绝对应该让您的所有内容都可以通过完整、正确的 URL 访问,并通过 ajax 加载它,然后更新 URL 以反射(reflect)您从中获取内容的地址。这样,当 JS 未运行时,您无需更改任何内容。
你是这个意思吗?
关于javascript - 多页与单页和不显眼的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15051489/