使用#进行哈希爬行!并在改变中幸存下来

时间:2012-04-27 11:09:35

标签: javascript jquery anchor hashbang

我正在尝试通过将#更改为#!来使我的网站可以抓取。单击链接时页面工作正常,但我无法修复脚本直接从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调用我的网站,它就不会加载内容。

任何人都可以指导我吗?

1 个答案:

答案 0 :(得分:0)

如果您查看错误控制台,您会发现它引发了以下异常:

  

未捕获错误:语法错误,无法识别的表达式:[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部分周围插入单引号。

在一个相关的说明中,我建议如果你要做哈希爆炸(他们很头疼)你将href属性作为你要去的实际URL值。在JavaScript中,切换到hash-bang。原因是禁用JavaScript的用户将无法使用您的网站。您的点击功能将稍微改变以设置哈希值,加载页面并禁用默认点击行为。

问题更新:在相关说明中,我的意思是href="#!foo"将href更改为实际为href="foo.php"。如果用户未启用JavaScript,则可以转到foo.php并查看该页面。如果用户确实有JavaScript将hashbang放在URL中并执行您之前执行的操作。你可以手动完成;但是,像jQuery BBQ这样的图书馆真的可以做到这一点。