2011-10-18 18 views
7

什么是哈希(#)这里的意义,它是如何涉及到.js文件:.js文件后散列(#)是什么意思?

<script src="foo.js#bar=1"></script> 
+3

你从哪里看到这个?通常,查询字符串(例如'foo.js?123)被用作“高速缓冲存储器断路器”。哈希可能不应该影响缓存。 –

+0

@Ates Goral上下文:Facebook的按钮嵌入脚本//connect.facebook.net/en_US/all.js#xfbml=1 – jsj

+0

对我来说,它看起来像Facebook发送一些参数。也许在all.js他们得到这个参数并使用它。 – Krasimir

回答

4

嵌入脚本使用脚本后的散列进行配置。例如,看看所提供的实施例(实):

1. window.setTimeout(function() { 
2. var a = /(connect.facebook.net|facebook.com\/assets.php).*?#(.*)/; 
3. FB.Array.forEach(document.getElementsByTagName('script'), function (d) { 
4.  if (d.src) { 
5.   var b = a.exec(d.src); //RegExp.exec on the SRC attribute 
6.   if (b) { 
7.    var c = FB.QS.decode(b[2]); //Gets the information at the hash 
8.    ... 

在脚本中,每个<script>标签线3在属性检查出现线的散列的5线2 。然后,如果散列存在行6,则hashdata被提取行7,并且该函数继续。

2

这大概是引用.js文件读取原始URL并提取参数内使用(使用例如window.location,例如解析出#之后的内容)。

3

我在加载脚本方面没有做任何事情。我猜测的是,脚本本身会查找自己的脚本标记,然后在散列(bar = 1)之后挑选出该部分,并用它来配置其行为。为此,他们可能必须遍历所有脚本标签并匹配src属性。

0

URL中散列之后的部分被认为是fragment identifier。如果存在,它指定整个资源或文档中的部分或位置。与HTTP一起使用时,它通常指定页面内的部分或位置,并且浏览器可以滚动以显示页面的该部分。

对于JavaScript文件,程序的作者很可能将它用作将参数传递给文件的方法。但是,不应该使用这种方法。网址可能包含query strings,它们的用途相同。

尽管如此,将参数嵌入到JavaScript文件的URL并不是一个好主意,因为对于每一个不同的参数集,URL都会被再次缓存,这是浪费内存。相反,最好将查询字符串设置为包含脚本本身的HTML页面的URL。这是因为JavaScript具有内置属性来访问网页的查询字符串:location.search。你可以阅读更多关于它here