2014-01-21 63 views
1

是否有可能(並且是一個好主意)通過哈希URL將動態數據傳遞給JavaScript包含文件?Javascript包含動態SRC技術=「url」

如:

<head> <script src="scripts.js#x=123&y=456"></script> </head> 

我尋找替代內聯JS中動態生成的網頁:

<head> 
    <script src="scripts.js#x=123&y=456"></script> 
    <script> 
     $(document).ready(function() { 
      pageInit(123, 456) 
     }); 
    </script> 
</head> 

這是個好主意,以避免內聯JS?如何在沒有Ajax的情況下傳遞動態數據,從而產生不必要的往返網絡請求?

注意:散列爆炸url是一個特殊的因爲瀏覽器在檢查緩存時忽略url的散列部分。至少對於html文件。

因此,所有這些都將重用index.html文件是在緩存:

index.html 
index.html#x=123 
index.html#x=345345 
index.html#x=2342&y=35435 

這一原則應該保持javascript文件屬實。我希望實現的是從頁面到頁面重用緩存版本的script.js。

去到index.php,這包括:

<head> <script src="scripts.js#x=123&y=456"></script> </head> 

然後將fun.php包括此

<head> <script src="scripts.js#x=898756465&y=5678665468456"></script> </head> 

然後將see.php包括此

<head> <script src="scripts.js#session=887987979&csrf_token=87965468796"></script> </head> 

從頁面視圖到頁面視圖,通過hash bang傳遞頁面需要的任何信息,同時重用scirpt.js來自緩存。

那麼,是否有可能從scirpts.js中讀取hash bang信息?

+0

不完全是一個用於計算器的問題,通過URL傳遞數據的方式,您可以使用這些特定值來緩存腳本,而不是緩存內嵌JavaScript代碼。 –

+0

stackoverflow似乎是唯一和最好的地方問這個問題。關於緩存,URL中的散列(#)會影響瀏覽器,以便使用緩存的頁面版本。 –

+0

@BrianMcGinity - 片段ID與緩存無關。 – Quentin

回答

0

如果您創建的HTML文件是動態的,那麼只需創建內嵌JavaScript。編寫一個包含只會創建一個來自瀏覽器的額外請求,您可以首先避免這種請求。

編輯: 只包括JavaScript文件讀取URL,你不需要通過任何變量(當然,你也可以):

$(document).ready(function() { 
    // pseudo code 
    hashbang = location.href.substr(location.href.indexOf('#') + 1); 
    if (hashbang.x && hashbang.y) { 
     pageInit(hashbang.x, hashbang.y); 
    } else if (hashbang.csrf_token) { 
     // do something else 
    } 
}); 
+1

對於第一頁請求,創建一個往返行程。第二個請求,使用緩存版本。 –

+0

那麼,如果URL更改(不同的x和y),您希望瀏覽器使用相同的HTML,但JavaScript不同? – Sonata

+0

我已經在問題中添加了進一步的說明...請參閱更新。我想要不同的html頁面使用緩存中的相同javascript文件,同時傳遞不同的hash bang信息。 –