javascript - 多页与单页和不显眼的 Javascript

标签 javascript html navigation unobtrusive-javascript ujs

我有一个站点的一部分,其中包含多个类别的小部件。每个类别名称都有一个菜单。对于启用了 Javascript 的任何人,单击一个类别都会在页面中显示该类别的内容。他们可以随意在类别之间单击,根据需要查看 DOM 更新。该 url 也使用标准哈希/hashbang 更新(如果我们对 Google 友好)。因此,对于登陆 example.com/widgets 的用户,他们可以导航至 example.com/widgets#oneexample.com/widgets#twoexample.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/

相关文章:

javascript - 单击删除 append

html - 如何编写嵌套元素的 XPath

html - 占位符文本在文本区域内被剪切

html - 触摸友好的嵌套导航菜单的解决方案?

javascript - 如何从 JavaScript 传递数据以在 Laravel 中执行数学运算

javascript - JS addEventListener() 困惑,好像是递归地添加给children?

android Intent 导航到多个目的地?

react-native - react native createDrawerNavigator 与标题/操作栏

javascript - PhantomJS 和 pjscrape - 在某些多个 URL 上失败

html - 我在我的网页上做了一个旋转木马,在电脑上工作正常,当我把它变小但在移动设备上它保持拉伸(stretch)