2012-04-27 47 views
0

我試圖通過更改#到#!來使我的網站可以被抓取。點擊鏈接時頁面可以正常工作,但我無法修復直接從URL調用哈希的腳本。使用#!使哈希可抓取並倖存的變化

這是我

HEAD

$(function() { 
    $("#tabs a").click(function() { 

     var page = this.hash.substr(2); 

     $.get(page+".php", function(gotHtml) { 
      $("#content").html(gotHtml) 
     }); 
    }); 

    (location.hash) ? $("a[href="+location.hash+"]").click() : $("#tabs a:first").click() 

}); 

BODY

< ul id="tabs"> 

< li>< a href="#!foo" >foo</a>< /li> 

< li>< a href="#!foo2" >foo2</a>< /li> 

< li>< a href="#!foo3" >foo3</a>< /li> 

< /ul> 

當我點擊FOO,內容加載好了,但如果我把我的網站www.foo。 com /#!foo,它不加載內容。

任何人都可以引導我嗎?

+0

僅供參考 - 這就是所謂的hashbang。 – scottheckel 2012-04-27 13:59:56

回答

0

如果你在錯誤控制檯看你會看到它拋出以下異常:

Uncaught Error: Syntax error, unrecognized expression: [href=#!foo2]

爲了解決這個問題,你可以改變你的JavaScript非常輕微。

$(function() { 
    $("#tabs a").click(function() { 

     var page = this.hash.substr(2); 

     $.get(page+".php", function(gotHtml) { 
      $("#content").html(gotHtml) 
     }); 
    }); 

    (location.hash) ? $("a[href='"+location.hash+"']").click() : $("#tabs a:first").click() 

}); 

注意我只是單引號圍繞你的選擇器的href部分。

在相關說明中,我會建議如果您要做hash-bangs(他們很頭痛),那麼您將使href屬性成爲您要使用的實際URL值。在JavaScript中切換到哈希。原因是禁用JavaScript的用戶將無法使用您的網站。您的點擊功能會稍微改變以設置散列,加載頁面並禁用默認點擊行爲。

更新問題:在相關的說明,我的意思是,如果href="#!foo"變化是HREF實際上是href="foo.php"。如果用戶沒有啓用JavaScript,他們可以去foo.php並查看頁面。如果用戶確實已經將JavaScript放置在URL中並執行之前的操作。您可以手動執行此操作;然而,像jQuery BBQ這樣的圖書館真的可以做到這一點。

+0

非常感謝您的回覆!它現在完美無瑕!當你說「使href屬性成爲你將要訪問的實際URL值」時,你能否詳細說明一下。我不明白......也許是一個例子? 對不起,我是一個總noob,我知道! 再次感謝! – jazzymany 2012-04-28 10:10:32

+0

當然,詳細闡述了一下。 – scottheckel 2012-04-30 13:29:46