2011-08-12 30 views
0

我們正在將視頻添加到網站的主頁,並且希望能夠在每次使用#video標記時自動彈出視頻(在Lightbox風格的容器中)是存在於URL:Javascript - 檢查哈希,忽略分析代碼

http://www.domain.com#video

視頻需要彈出如果鏈接點擊內部網站上(即:<a href="#video">)並且如果散列出現在頁面加載的URL。

簡單到足以使用window.location.hash檢查URL中的散列值,或者點擊帶有散列的鏈接並觸發相關的javascript函數。這是按預期工作,沒有任何問題。

然而,因爲這URL將在電子郵件中與谷歌分析代碼自動添加,分析代碼被附加在URL的結尾被髮送出去:

http://www.domain.com#video?utm_source=...

由於分析代碼將與每個改變電子郵件活動,我無法做一個簡單的Javascript replace()忽略分析代碼。

我該如何去檢查哈希是否存在於URL中,但忽略之後的任何內容?如果存在?

回答

0

不是在查詢參數後面有散列末尾的URL的正確形式嗎?然後,location.hash變量將正常工作,並且不需要特殊代碼。您的網址應該是這樣的,然後你可以直接使用location.hash這將是#video

http://www.domain.com?utm_source=xxx#video

我不建議這樣的解決方案(我想你應該得到的URL固定爲法律),但你可以使用此代碼來解析散列值出即使是在不正確的位置的URL:「?」

var matches = window.location.href.match(/#(.*?)(\?|$)/); 
if (matches) { 
    var hash = matches[1]; 
} 

此代碼從「#」串的兩端或提取以先到者爲準。你可以看到它在這裏的一堆測試網址上運行:http://jsfiddle.net/jfriend00/HuqL7/

+0

這是,但分析代碼是由電子郵件軟件自動添加到所有URL,所以它不是真正在我的控制之下。 – adnrw

+0

我相當懷疑如果添加錯誤,它會起作用。我認爲你需要從源頭上解決它。 – jfriend00

+0

@adnrw - 我在我的答案中添加了代碼,它不依賴於解析合法和非法URL來獲取散列值的window.location.hash對象的行爲。 – jfriend00

0
location.hash.match(/[^?]*/) 

假設哈希始終是第一個,應該這樣做。

0

(這是一個文字回答你的問題,但有一個巨大的caveate)從技術上講,你可以測試:

var h = window.location.hash; 
var ind = h.indexOf('?'); 
var test = ind <0?h:h.substr(0, ind) 

如果你想谷歌分析工作,你可能有問題#。規則是,#之後的所有內容都不會發送到服務器,這意味着您的Google Analytics可能會熄滅。您需要確保在所有Google資料之後添加散列。如果是這樣,那麼你不需要擔心測試任何東西。

+0

對,我不知道。如上所述,分析代碼是由電子郵件軟件自動添加的,所以我可以做的不多。 – adnrw