Hashbang 与 URI 解析

2023-11-30

我希望将我的网站移至完全异步文档加载,但我不想使用#!请求处理方法,因为 1) 我不想断开链接,2) 我想要一种更灵活的方式来处理站点获取的 URI。

我已经能够为我的网站构建一个轻型 MVC,允许使用通用样式的 url(例如:http://ddrewdesign.com/blog/jquery-is-or-is-child-of-function)提出正确的请求。

我的问题是:这很容易做到。我缺少什么? Gawker 和 Google 为何选择#!从用户体验的角度来看,这种方法何时似乎更有意义?

EDIT

为了澄清起见,最初,我的网站仅使用查询字符串方法(没有mod_rewrite)检索请求。这些链接遍布网络,我不能让它们断开。据我了解,如果我转向使用 hashbang 方法,他们就会这样做。再说一遍:这可能是我困惑的一部分,所以我并不是说我已经解释了一切。我问我错过了什么,因为到目前为止我读过的任何内容都没有让我看起来可以容纳该查询字符串。


我认为您正在寻找history.pushState url,它允许您进行部分页面加载,并且具有相同的url(带或不带javascript)。

例如,假设您的基本网址是http://site.com/通过history.pushState,您可以使用javascript将页面修改为javascript.htm,这样 url 就会变成http://site.com/javascript.htm.

#!url 仅适用于 javascript,因为无法在服务器端访问 #fragment。使用 hashbangs,你的 url 会是这样的http://site.com/#javascript.htm请注意,!是不必要的。由于您可以在哈希值之后设置任何内容,因此您还可以拥有 urlhttp://site.com/#!/javascript.htm.

不幸的是,由于IE不支持history.pushState,你必须有#!url 作为后备。

这两种方法都不会破坏后退按钮,但必须为每种方法设置不同的 url。

Hashbang 的工作原理如下:

function change(){
   //page update logic
}

//hashchange event binding
(typeof window.addeventListener === "function")
    ? window.addEventListener("hashchange", change, false)
    : window.attachEvent("onhashchange", change);

 //This is how the hash is set
 location.hash = "hashstring";

 //Accessing it returns the hashstring, with a #
 location.hash; //returns #hashstring

History.pushState 有点复杂,因为您将页面的“状态”存储在对象中。

以下是有关此方法的一些很好的参考:

  • Javascript:权威指南第六版
  • https://developer.mozilla.org/en/DOM/Manipulated_the_browser_history
  • http://diveintohtml5.ep.io/history.html

两种方法都需要 JavaScript 页面操作。我有一个此类网址的示例。http://timshomepage.net/comic/具有指向一堆不同网络漫画的链接,并将它们嵌入到页面的 iframe 中。禁用 javascript 后,链接将类似于http://timshomepage.net/comic/dilbert。使用history.pushState,我可以拥有相同的url。通过 hashbang 回退,我得到一个像这样的 url:http://timshomepage.net/comic/#!/dilbert

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hashbang 与 URI 解析 的相关文章

随机推荐

  • 为什么包含prototype.js会破坏jquery bbq的功能?

    I have
  • IE < 9 不支持 $("").attr("src",something).load() ?

    http jsfiddle net DerekL qDqZF img attr src http derek1906 site50 net navbar images pic3 png load function body html don
  • 如何将文件复制/替换到 VB.NET 中的文件夹中?

    I used File Copy source target True where source是完整路径名 例如c source txt and target是一个文件夹 其中可能包含同名文件 我想复制source txt到目标文件夹并覆
  • 文件浏览器访问 Chrome 的沙盒文件系统

    我正在编写一个 Google Chrome 应用程序 它使用 HTML5 文件系统 API 在本地存储内容 有什么方法可以使用 Windows 资源管理器访问 Chrome 存储这些文件的目录 还是完全虚拟且无法从应用程序外部访问 我无法通
  • Android解析json树

    我有树形 JSON 结构数据 就像是 result id 1 name test1 id 2 name test12 children id 3 name test123 children id 4 name test123
  • 如何保护 Android 资产文件夹免受黑客攻击

    如何保护 Android 资产文件夹免受黑客攻击 有什么方法可以保护assets文件夹吗 您保存的任何内容Asset仅当您将其复制到内部或外部缓存目录中后才能访问该文件夹 因此 您无法同时保护它免受剥削者的侵害 但是 您可以将此文件夹中的任
  • 核心数据多线程取记录

    我对 CoreData 中的多线程有一个疑问 如果我们使用多线程 我们应该使用单独的 NSManagedObjectContext 来插入新数据或更新 否则我们可以使用父子上下文方法 但我只是创建新的 NSManagedObjectCont
  • string array[] = ""; 是什么意思?是什么意思以及为什么它有效?

    string array 我怎样才能分配一个const char 到一个数组 是不是等同于 string array 这对我来说是有意义的 然而 这仍然不起作用 int array 5 那么它们之间有什么区别 它不起作用int arrays
  • 如何在 PIVOT 中用 0 输出替换(空)值

    我尝试在 PIVOT 函数中将 空 值转换为 0 零 输出 但没有成功 下面是我尝试过的表格和语法 SELECT CLASS AZ CA TX FROM TEMP PIVOT SUM DATA FOR STATE IN AZ CA TX A
  • SQLiteException:不存在这样的表

    我试图在我的 Android 应用程序中创建一个 SQLite 数据库 但我的代码始终抛出 SQLiteException 表示不存在这样的表 我是 SQL 新手 但我认为这意味着我的创建脚本无法正常运行 我的部分代码如下 请指出您发现的任
  • Metro App 如何禁用 Gridview 滚动

    是否可以在 GridView 中禁用滚动 在 GridView 内部尝试一下
  • Flex/Flash可以录屏吗?

    这个问题非常简单 我实际上只想流式传输用户计算机的视频 就像从网络摄像头录制一样 但源来自桌面 想想 截屏工具 我特别想在纯 Flash 中执行此操作 无需下载或附加组件 对于 Google 来说 这将是一个简单的问题 但它对所有 导出到
  • 显式调用时析构函数被调用两次

    我正在用这段代码尝试 C 中的析构函数 include
  • 使用 osmdroid-android-3.0.7 运行时无法访问资源图标

    我正在尝试启动一个简单的地图活动 使用 osmdroid android 3 0 7 库显示地图和几个标记 该代码在旧版本 1 10 下运行 我收到以下错误 02 03 15 14 30 574 E AndroidRuntime 10277
  • 如何给盒子的一部分着色

    我试图显示红色和橙色框的左侧 10 并使背景的其余部分透明 或白色 这可能吗 如果是的话请告诉我该怎么做 谢谢 box background linear gradient to right red orange border 1px bl
  • 如何从 Eclipse 项目中删除 javascript 验证?

    我在我的项目中使用 Eclipse 在搞乱我的 Eclipse 设置时 我打开了 Javascript 支持 现在 eclipse 抱怨 JQuery 库有错误并且不允许我编译该项目 有谁知道如何关闭 javascript 验证吗 我实际上
  • 用Matlab对角展开矩阵

    我有一个矩阵B我想获得一个矩阵C维度的 L k m by L n L and k是输入值 B0 B1 Bk有尺寸m by n 例如 如果我有一个矩阵B 1 1 1 1 1 1 with B0 1 1 B1 1 1 and B2 1 1 以及
  • 根据包含列名的变量从不同列中选择值[重复]

    这个问题在这里已经有答案了 我有一个像这样的 data table col1 col2 col3 new 1 4 55 col1 2 3 44 col2 3 34 35 col2 4 44 87 col3 我想填充另一列matched va
  • 如何在 SoapUI 中访问需要用户名/密码的 wsdl URL?

    如何访问 wsdl URLSOAPUI 这需要用户名 密码 http localhost 8080 ws hello1 wsdl SoapUI 4 6 4 中检索受密码保护的 WSDL 时存在错误 该错误已修复5 0 0 可以从以下地址下载
  • Hashbang 与 URI 解析

    我希望将我的网站移至完全异步文档加载 但我不想使用 请求处理方法 因为 1 我不想断开链接 2 我想要一种更灵活的方式来处理站点获取的 URI 我已经能够为我的网站构建一个轻型 MVC 允许使用通用样式的 url 例如 http ddrew