1、#的涵义

代表网页中的一个位置。井号后面的字符,就是该位置的标识符。比如,

http://www.baidu.com/index.html#one

就代表网页index.html的one位置。浏览器读取这个URL后,会自动滚动one的位置。

怎么为网页位置指定标识符,有两种方法。一是使用锚点,比如,
或者使用id属性,比如

2、HTTP请求不包括#

是用来指导浏览器动作的,对服务器端完全无用。

比如,访问下面的网址
http://www.baidu.com/index.html#one

浏览器实际发出的请求时这样的:
GET /index.html HTTP/1.1

Host:www.baidu.com

可以看到,只是请求index.html,根据没有"#one"的部分。

3、#后的字符
在第一个#后面出现的任何字符,都会被浏览器读为位置标识符。这意味着,这些字符都不会被发送到服务器端。

比如:下面URL的原意是制定一个颜色值:

http://www.baidu.com/?color=#fff

但是,浏览器实际发出的请求时:
GET /?color= HTTP/1.1

Host: www.baidu.com
可以看到,"#fff"被省略了。只有将#转码为%23,浏览器才会将其作为
实义字符处理。也就是说,上面的网址应该被写成:

http://www.baidu.com/?color=%23fff

4、改变#不触发网页重载

单单改变#后的部分,浏览器只会滚动到相应的位置,不会重新加载网页。

比如:从
http:www.baidu.com/index.html#one

改成http://www.baidu.com/index.html#two

浏览器不会重新向服务器请求index.html。

5、改变#会改变浏览器的访问历史

每一次改变#后的部分,都会在浏览器的访问历史中增加一个。
使用"后退"按钮,就可以回到上一个位置。

这对于ajax应用程序特别有用,可以用不同的#值,表示不同的访问状态,然后向
用户给出可以访问某个状态的连接。

值得注意的是,上述规则对IE6和IE7不成立,他们不会因为#的改变而增加历史。

6、window.location.hash读取#的值

window.location.hash这个属性可读可写。读取时,可以用来判断网页状态是否改变;
写入时,则会在不重载网页的前提下,创造访问历史。

7、onhashchange事件

这是一个HTML 5新增的事件,当#hash发生变化时,就会触发这个事件,IE8+、Firefox3.6+、Chrome 5+、Safari 4.0+支持
该事件。

它的使用方法有三种:
window.onhashchange = func;

window.addEventListener("hashChange",func, false);

8、Google抓取#的机制

默认情况下,Google的网络蜘蛛忽视URI的#部分。

但是,Google还规定,如果你希望ajax生成的内容被浏览器引擎读取,那么URL中可以使用
"#!",Google 会自动将其后面的内容转化成查询字符串,_esacped_fragment_的值

比如,Google发现新版Twitter的url如下:

http://www.twitter.com/#!/username

就会自动抓取另一个URL

http://www.twitter.com/?_esacped_fragment_=/username

通过这种机制,Google就可以索引动态的ajax内容。

URL地址中的#的更多相关文章

  1. URL地址中使用中文作为的参数【转】

    原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...

  2. 去除magento多店铺URL地址中的“___from_store=”

    magento 的多店铺功能,大多数情况下是根据语言来进行选择的,当添加了多店铺之后,一般情况下我们会选择开启添加store code到url地址中. Magento 自带的这种功能算是比较不错了,但 ...

  3. 解决URL地址中的中文乱码问题的办法

    解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...

  4. URL地址中中文乱码详解(javascript中encodeURI和decodeURI方法、java.net.URLDecoder.encode、java.net.URLDecoder.decode)

    引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生了,该如何解决呢?且听本文详细道来. ...

  5. JS动态获取项目名以及获取URL地址中的参数

    在项目当中我们可能会遇到例如改变的项目名称之后,相对应的地址就需要改变,为了减少工作量,将地址当中的项目名这一块写成动态获取的,那么最关键一点就是我要先获取它,再进行操作: 知识点整理,话不多说,直接 ...

  6. 【面试题】如何去掉vue的url地址中的#号?及其原理?

    如何去掉vue的url地址中的#号?及其原理? 点击打开视频讲解更加详细 如何去掉vue的url地址中的#号? import Vue from 'vue'; import VueRouter from ...

  7. JavaScript------获取url地址中的参数

    $(document).ready(function () { //获取地址中的参数(name是字符串) function getParameter(name) { //正则表达式 var reg = ...

  8. URL地址中的转义符

    如果在XML里面存储URL地址可能涉及到转义符的问题 WEB开发中通过问号(?)方式在浏览器地址栏中传值时.浏览器是通过“&”来区分问号后的参数个数的. 如果出现传值参数中带有“&”时 ...

  9. 获取Url地址中参数的3种方法【华为云技术分享】

    获取Url的代码如下:window.location.href; 方法一:原生js(假设已经获得了Url地址) var url = 'https://gitbook.cn/gitchat/geekbo ...

  10. ipv6地址在URL中的表达方式,如何在URL地址中包含ipv6地址

    摘要 本文档定义了在WWW浏览器的URL中执行的文本IPv6地址的格式.在包括Microsoft的IE,Mozilla和Lynx等几个已经被广泛安装使用的浏览器的IPv6版本中,这种格式已经被使用.并 ...

随机推荐

  1. linux每日命令(20):find命令概览

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时 ...

  2. AtomicInteger 源码阅读

    Package java.util.concurrent.atomic 这是一个小工具包,它的实际作用是提供了很多个无阻塞的线程安全的变量操作工具. 无阻塞的线程安全:其含义就是不使用 synchro ...

  3. mysql中update+select

    mysql中不支持嵌套查询后更新操作. 但是可以使用inner join来解决自身的更新问题,参考如下例子: update hera_job a inner join( ),'"') as ...

  4. CodeIgniter中使用CSRF TOKEN的一个坑

    事情的经过是这样的,一个自动化扫描工具说我的代码中存在XSS漏洞,什么是XSS不懂的朋友可以看这里 我的代码里面开启CodeIgniter框架的CSRF Token,如下: 很简单,更多详情参考CI官 ...

  5. Java知多少(51)finally

    当异常被抛出,通常方法的执行将作一个陡峭的非线性的转向.依赖于方法是怎样编码的,异常甚至可以导致方法过早返回.这在一些方法中是一个问题.例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文 ...

  6. Java知多少(86)文本框和文本区的输入输出

    在GUI中,常用文本框和文本区实现数据的输入和输出.如果采用文本区输入,通常另设一个数据输入完成按钮.当数据输入结束时,点击这个按钮.事件处理程序利用getText()方法从文本区中读取字符串信息.对 ...

  7. Oracle清理回收站的方法

    原文链接:http://blog.itpub.net/18841027/viewspace-1057765/ purge DBA_RECYCLEBIN用于删除Oracle数据库回收站的所有数据,需要s ...

  8. Java ThreadPool的正确打开方式花钱的年华 | 江南白衣(5星推荐)

    线程池应对于突然增大.来不及处理的请求,无非两种应对方式: 将未完成的请求放在队列里等待 临时增加处理线程,等高峰回落后再结束临时线程 JDK的Executors.newFixedPool() 和ne ...

  9. linux手动安装sbt过程

    ubuntu14 手动安装sbt 参见官网配置说明http://www.scala-sbt.org/release/tutorial/Manual-Installation.html 1.下载sbt通 ...

  10. 基于Java的数据采集(三)

    <基于Java的数据采集(一)>:http://www.cnblogs.com/lichenwei/p/3904715.html <基于Java的数据采集(二)>:http:/ ...