为什么document.referrer没有#

时间:2018-03-22 20:45:43

标签: javascript referrer document.write

在使用document.referrer时它是否标准,它不会在#之后显示参数?我使用下面的代码来检查我建立的脚本:

<script type="text/javascript">
document.write (document.referrer);
</script>

这是理想的,因为我不想在网址之后将任何详细信息发送到我链接的网站

2 个答案:

答案 0 :(得分:3)

是的,这是正常的和预期的。 document.referrer的{​​{3}}说:

  

返回链接到此页面的页面的URI [IETF RFC 2396]。如果用户直接导航到页面(不是通过链接,而是通过书签),则该值为空字符串。

specification说:

  

4.1。片段标识符

     

当使用URI引用对标识的资源执行检索操作时,通过交叉线(“#”)字符与URI分隔的可选片段标识符包含要由用户代理解释的其他参考信息检索操作成功完成后。因此,它不是URI的一部分,但通常与URI结合使用。

所以document.referrer包含一个URI,但#之后的部分不是URI的一部分,因此不包括在内。

答案 1 :(得分:2)

是的,这是标准的。浏览器不会将#或之后的任何内容发送到任何服务器。对于您单击时发送到服务器的URL以及引用者也是如此。

fragment identifiers上的维基百科页面描述了这种行为;请参阅“基础知识”部分。

这适用于浏览器自行发送的网址,例如当您单击链接时。如果您在使用XMLHttpRequest的网页上拥有JavaScript代码,那么该JavaScript代码可以将任何发送到服务器。浏览器为XMLHttpRequest发送的实际URL仍将省略URL中的任何片段标识符,但JavaScript代码可以转义并打包该信息并将其作为查询参数的一部分或{{1}发送数据(两者都发送到服务器)。这就是Google Analytics可以发送片段标识符的方式,如下面Barmar的评论中所述。