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 解析 的相关文章

  • javascript:全局变量泄漏

    每当我向 Firefox 提交插件时 我都会收到一封电子邮件 告诉我我的一些变量正在泄漏到全局范围内 一旦他们告诉我我解决了问题 但在那之前有什么方法 程序 来检查变量是否泄漏到全局范围内 Thanks Both JSLint http w
  • appendChild 错误:无法在层次结构中的指定点插入节点

    There is an error with the function appendChild Node cannot be inserted at the specified point in the hierarchy JS var a
  • 在自动完成上添加 jQuery 延迟

    我正在尝试为应用程序创建 jQuery 自动完成 search input on keyup function search this val autocomplete div autocomplete get ajax search se
  • 使用 Jquery 传递隐藏字段值

    我有一个正常的hidden Input field我在哪里生成random string 我需要将其附加到我尝试将数据发布到另一个页面的 URL 中 我已经做到了这一点并且效果很好 url Upload html field1 newval
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 转义 \u200b(零宽度空格)和其他非法 JavaScript 字符

    我有一组 JavaScript 对象 我引导到后端模板 以在页面加载时初始化我的 Backbone js 集合 它看起来像这样 作为 Twig 模板 我遇到的问题是某些文本字段包含 u200b 零宽度空格 这会破坏
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • JSONP 使用 JQuery 从 HTTPS 协议获取 JSON

    我正在尝试获取从 https 安全站点发送的 JSON 客户端希望不要使用任何服务器端语言 全部都是 Javascript 我读到 当使用 Jquery 中的 ajax 函数时 我必须使用 JSONP 才能从安全站点加载 JSON 我的第一
  • 嵌套 DIV 的类似斑马的 CSS 样式

    我嵌套了 DIV 元素 但我不知道嵌套的级别 我需要每个都有与其父级不同的背景 创建类似斑马的颜色 我只使用两种背景 深色和白色 效果需要类似于在容器中设置奇数和偶数子级的样式 但在我的例子中 子级是嵌套的 我可以使用每个嵌套元素的规则来做
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • 在 Android Chrome 中隐藏 HTML5 音频/视频通知

    我的网络应用程序上有一个 HTML5 音频元素 在某些时候 我使用以下代码以编程方式停止播放 audioElement pause audioElement currentTime 0 播放音频时 我的 Android 设备 使用 Goog
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 如何获取符号名称(文字)?

    以下情况 var myVehicle brand Tesla var isMoving Symbol var currentStatus Symbol myVehicle isMoving true myVehicle currentSta
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直
  • Keycloak-js updateToken(minValidity) 需要澄清

    我在Keycloak js中阅读了很多该方法的示例 但没有对以下方法进行明确的解释 updateToken minValidity number KeycloakPromise
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当

随机推荐

  • 为什么包含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