一个.js文件后面的井号(#)代表什么意思?

7
这里的井号(#)有什么重要性,它与.js文件有什么关系?
<script src="foo.js#bar=1"></script>

3
你在哪里看到这个?通常,查询字符串(例如 foo.js?123)被用作“缓存破坏器”。哈希值可能不应影响缓存。 - Ates Goral
@Ates Goral 上下文:Facebook 的“赞”按钮嵌入脚本 //connect.facebook.net/en_US/all.js#xfbml=1 - jsj
对我来说,看起来像是Facebook正在发送一些参数。也许在all.js中他们正在获取这个参数并使用它。 - Krasimir
@KrasimirStefanovTsonev 哈希如何用于传递参数? - jsj
哈希部分可能被解析出DOM以实现某些目的。也许他们可以通过使用data-xfbml="1"属性来实现相同的效果。 - Ates Goral
4个回答

4

脚本后的哈希值用于嵌入式脚本进行配置。例如,查看提供的示例(Facebook):

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行)都会被检查其属性中出现的哈希值(第2行)。如果哈希存在(第6行),则提取哈希数据(第7行),继续执行函数。请注意保留 HTML 标记。

3

我并不在加载脚本方面做任何事情。我猜想,这个脚本本身会寻找它自己的脚本标签,并选择哈希后面的部分(bar=1),并用它来配置其行为。为了做到这一点,他们可能需要循环遍历所有的脚本标签,并与src属性匹配。


2

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


0

URL中#后面的部分被称为片段标识符。如果存在,它指定了资源或文档中的某个部分或位置。在HTTP中使用时,它通常指定页面中的某个部分或位置,浏览器可以滚动以显示该页面的该部分。

关于JavaScript文件,程序的作者很可能将其用作传递参数到文件的方法。然而,不应该使用这种方法。URL可以包含查询字符串,其具有相同的目的。

尽管如此,将参数嵌入JavaScript文件的URL永远不是一个好主意,因为对于每组不同的参数,URL都会再次缓存,这是一种浪费内存的行为。相反,最好在包含脚本本身的HTML页面的URL上设置查询字符串。这是因为JavaScript具有访问Web页面查询字符串的内置属性:location.search。您可以在这里阅读更多相关信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接