当前位置: 首页 > 面试题库 >

Hashbang与URI解析

卫甫
2023-03-14
问题内容

我希望将我的网站转移到完全异步文档加载中,但是我不想使用#!请求处理的方法,因为1)我不想破坏链接,以及2)我想要一种更灵活的处理方式网站获取的URI。

我已经能够为我的网站构建一个简单的MVC,该MVC允许使用通用样式的网址(例如:http://ddrewdesign.com/blog/jquery-is-or-is-child-of-
function
)来制作正确的要求。

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

编辑

为了澄清起见,最初,我的网站仅使用querystring方法(no
mod_rewrite)来检索请求。这些链接遍布网络,我无法中断。我的理解是,如果我转为使用hashbang方法,他们会这样做。再说一次:这可能是我困惑的一部分,所以我并不是说我已经考虑了所有问题。我要问的是我所缺少的东西,因为到目前为止,我所读的任何内容似乎都无法容纳该查询字符串。


问题答案:

我认为您正在寻找history.pushState网址,该网址可让您进行部分页面加载,并且无论是否带有javascript,它们都具有相同的网址。

例如,假设您的基本url为http://site.com/With
history.pushState,则可以使用javascript将页面修改为javascript.htm,以便url更改为http://site.com/javascript.htm

#!网址仅适用于javascript,因为#fragment无法在服务器端访问。使用hashbangs时,您的网址应类似于“
http://site.com/#javascript.htm注意”,这!是不必要的。由于您可以在哈希之后设置任何内容,因此也可以使用url
http://site.com/#!/javascript.htm

不幸的是,由于IE不支持history.pushState,因此必须将#!URL作为备用。

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

Hashbangs的工作方式如下:

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:权威指南第6版
  • https://developer.mozilla.org/en/DOM/Manipulating_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



 类似资料:
  • 我在Android Studio中编写Kotlin代码。用户从电话中选择一个文件(我需要以字符串的形式访问内容)。我得到了一个乌里?。和那个乌里?我可以从.csv和.txt文件中提取文本: ... 我已经试了好几天了。有没有人知道,在Kotlin是怎么运作的?

  • 问题内容: 除了使AJAX内容可抓取到Google之外,shebangs / hashbangs还有其他用途吗?还是那? 问题答案: 在URL中使用哈希时,早在发明Ajax之前就已经存在。 它最初旨在作为对页面中小节的引用。在这种情况下,例如,您将在页面顶部具有一个目录,每个目录都是到同一页面一部分的哈希链接。当您单击这些链接时,页面向下(或向上)滚动到相关标记。 当浏览器接收到带有哈希值的URL

  • 问题内容: 我有一个网页,上面有两个AngularJS应用程序。因为有两个应用程序,所以我必须将这些应用程序引导到页面上。我正在引导这样的应用程序: 我的问题是,如何完全关闭哈希开关?我没有使用AngularJS进行视图管理。我将它用于其他用途。但是由于某种原因,当我访问带有Angular的IE8的页面时,用户将被重定向到其中具有hashbang的页面。哈希引发服务器端错误。因此,我需要将其关闭。

  • 问题内容: 我正在尝试为node.js创建一个可以在多种环境下工作的脚本。特别是对我来说,我正在OS X和Ubuntu之间来回切换。在前者中,Node安装为,而在后者中,安装为。在脚本的顶部,我可以有: 要么 只要安装了node,我宁愿脚本在任一环境中都作为可执行文件运行,而不是让一个或另一个必须指定命令(vs. )。 有什么方法可以指定备份hashbang或与node.js兼容的备份哈希吗? 问

  • 问题内容: 在W3 Schools URL编码网页 上看到,它说应该被编码为,并且应该被编码为。 我已经尝试了和,但是上述方法都没有正确执行: 由于某些原因,电子邮件地址正确但不能空格,并且货币而不是电子邮件地址。 我应该如何编码这两个参数,以与w3schools所说的正确(或w3schools错误)相一致? 问题答案: 尽管我认为@fge的答案是正确的,但是由于我使用的是基于W3Schools文

  • 问题内容: HTML图像元素具有以下简化格式: 那可以是,例如: 是否有使用python解析此内容的标准方法,以便获取和base64数据分开,还是应该为此创建自己的解析器? 问题答案: 在逗号上分割数据URI,以获得没有标题的base64编码数据。调用以将其解码为字节。最后,将字节写入文件。