这里的井号(#)有什么重要性,它与.js文件有什么关系?
<script src="foo.js#bar=1"></script>
<script src="foo.js#bar=1"></script>
脚本后的哈希值用于嵌入式脚本进行配置。例如,查看提供的示例(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 标记。我并不在加载脚本方面做任何事情。我猜想,这个脚本本身会寻找它自己的脚本标签,并选择哈希后面的部分(bar=1),并用它来配置其行为。为了做到这一点,他们可能需要循环遍历所有的脚本标签,并与src
属性匹配。
这可能是在引用的.js
文件中使用,读取原始URL并提取参数(例如使用window.location
),并解析出#
后面的内容。
URL中#后面的部分被称为片段标识符。如果存在,它指定了资源或文档中的某个部分或位置。在HTTP中使用时,它通常指定页面中的某个部分或位置,浏览器可以滚动以显示该页面的该部分。
关于JavaScript文件,程序的作者很可能将其用作传递参数到文件的方法。然而,不应该使用这种方法。URL可以包含查询字符串,其具有相同的目的。
尽管如此,将参数嵌入JavaScript文件的URL永远不是一个好主意,因为对于每组不同的参数,URL都会再次缓存,这是一种浪费内存的行为。相反,最好在包含脚本本身的HTML页面的URL上设置查询字符串。这是因为JavaScript具有访问Web页面查询字符串的内置属性:location.search
。您可以在这里阅读更多相关信息。
foo.js?123
)被用作“缓存破坏器”。哈希值可能不应影响缓存。 - Ates Goraldata-xfbml="1"
属性来实现相同的效果。 - Ates Goral