2011-10-18 17 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