有没有适用于处理hashbang/shebang (#!) URL的javascript库?

15

鉴于Twitter和Gawker使用hashbang urls(井号+感叹号的URL)饱受负面报道,我很难找到任何使用它们的例子或库。

我想在我们网站上的JavaScript轮播组件中使用hashbang urls,以便我们可以直接链接到轮播组件的特定页面。

是否有任何良好的跨浏览器库或示例(最好是非jQuery,因为我们使用Prototype),可用于将新的URL推送到页面位置并在页面加载时解析URL?


1
负面新闻?在我看来,这是完全可以接受的(http://code.google.com/web/ajaxcrawling/docs/specification.html)。 - Brad Christie
是的.. 你指的是哪些负面新闻? - drudge
1
这里有一个: "用Hash Bangs破坏网络" http://isolani.co.uk/blog/javascript/BreakingTheWebWithHashBangs。我特别喜欢作者谈论的内容,即HashBangs和过度依赖站点作者未编写的JavaScript的正确性,在HTML管理的新世界中已经以所有人都害怕XHTML的方式破坏了网站。 - scriptocalypse
只需尝试在Google上搜索“javascript hashbang”,前三页大多是关于Gawker新推出的文章。其余的则仅解释了hashbang是什么以及如何在SEO中使用它。 - Twipped
1
有一些负面报道。Tim Bray 最近发表了自己的看法:http://www.tbray.org/ongoing/When/201x/2011/02/09/Hash-Blecch - Tim Down
同时,http://simonwillison.net/tags/hashbanghell/ - Tim Down
4个回答

6

所以,如果我理解正确的话,您将URL模式添加到库中,当哈希更改以匹配其中一个模式时,它会触发相关联的函数? - Twipped
是的,没错。我已经更新了文档,让它更加清晰明了一些。抱歉回复晚了。 - afshin
这差不多就是我在寻找的。谢谢! - Twipped

1

Sammy.js使用它们创建处理程序,例如Sinatra中使用的那些。


0

Google Closure Library有一个非常酷的浏览器历史堆栈实现。您可以从这里访问历史源代码

要使用Closure Library历史管理器,您应该定义一个隐藏输入。这是一个技巧。如果您不给类一个输入字段,它会为您创建一个,但它会尝试使用document.write将其附加到DOM中,因为跨浏览器支持。最好和简单的方法是提供一个隐藏的输入。

这是一个简单的goog.History实现。

var history = new goog.History(false, '', document.getElementById('historyInput'));
goog.events.listen(history, goog.history.EventType.NAVIGATE, function() {
    console.log(history.getToken());
});
history.setEnabled(true);

然后在页面中导航到一些哈希 URL,您应该在控制台中看到已更改的哈希作为日志。


0

这个很接近,但在不同的浏览器中产生了完全不同的URL。我需要它保持一致。 - Twipped

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接