我去了一些照片分享网站,所以当我点击照片时,它会引导我到一个网址
www.example.com/photoshare.php?photoid=1234445
。当我点击此页面中的另一张照片时,网址就会变为
www.example.com/photoshare.php?photoid=1234445#3338901
如果我点击同一页面中的其他照片,则#后面的唯一数字会发生变化。和漂亮的照片一样
www.example.com/photoshare.php?album=holiday#!prettyPhoto[gallery2]/2/
。我假设他们使用了ajax,因为整个页面似乎没有加载,但是网址被更改了。
答案 0 :(得分:11)
#
后面的网址(包括和)部分是fragment identifier。它的其余部分是特殊的。要记住的关键是“仅客户端”(当然,客户端可以选择将其发送到服务器......而不是作为片段标识符):
片段标识符的功能与URI的其余部分不同:即,其处理完全是客户端的,没有服务器的参与 - 当然,服务器通常有助于确定MIME类型,并且MIME类型确定片段的处理。当代理(例如Web浏览器)从Web服务器请求资源时,代理会将URI发送到服务器,但不会发送该片段。而是代理等待服务器发送资源,然后代理根据文档类型和片段值处理资源。
这可用于导航到“锚点”链接,例如:http://en.wikipedia.org/wiki/Fragment_identifier#Basics(请注意它是如何进入“基础”部分)。
虽然过去常常只使用“锚点”,但它现在用于在许多基于JavaScript的站点中存储可导航状态 - 例如,gmail大量使用它。并且,就像这里的情况一样,有一些“photoshare”JavaScript也使用片段标识符进行状态/导航。
因此,如所怀疑的,JavaScript“捕获”片段(有时称为“散列”)更改并执行AJAX(或其他后台任务)来更新页面。片段更改时页面本身不会重新加载,因为URL仍然引用相同的服务器资源(片段标识符之前的URL部分)。
较新的浏览器支持onhashchange
事件,但长期以来,各种轮询技术都支持监控。
快乐的编码。
答案 1 :(得分:4)
它被称为片段标识符。它标识页面的“部分”。如果存在name
或id
属性等于片段文本的元素,则会导致页面滚动到该元素。它们也被丰富的JavaScript应用程序用于引用应用程序的不同部分,即使所有功能都位于单个HTML页面上。
最近,您经常会看到以“#!”开头的片段。虽然这些技术上只是以!字符开头的片段,但该格式为specified by Google以帮助使这些AJAXy伪页面可以抓取。
答案 2 :(得分:1)
这是锚点网址的名称属性:http://www.w3schools.com/HTML/html_links.asp
用于在HTML页面中创建书签(不要与工具栏中的书签混淆等)。
在您的示例中,如果您使用URL中的#符号为页面添加了书签,当您再次访问该书签时,它将显示您查看的最后一张图片,很可能是ID为3338901的图片。
答案 3 :(得分:1)
url(和其他东西)上下文中的'#'符号称为散列,散列后称为片段。使用JavaScript,您可以访问片段并使用其内容。
例如,大多数浏览器都会实现onhashchange
事件,当哈希值发生变化时会触发该事件。使用JavaScript,您还可以从location.hash
访问哈希。例如,使用类似http://something.com#somethingelse
var frag = location.hash.substr(1);
console.log(frag);
这会在控制台上打印'somethingelse'。如果我们没有使用substr
删除第一个字符,则frag
将为:'#somethingelse'。
此外,当您导航到带有主题标签的URL时,浏览器将尝试向下滚动到与该片段对应的id
的元素。
答案 4 :(得分:0)
location.href = data.url.replace(/%2523/, '%23');
其中data.url是我的原始网址。它替换了我的网址中的#