问题标签 [hashbang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
116067 浏览

facebook - Facebook 和新 Twitter URL 中的 shebang/hashbang (#!) 有什么用?

我刚刚注意到我们习惯的冗长而复杂的 Facebook URL 现在看起来像这样:

http://www.facebook.com/example.profile#!/pages/Another-Page/123456789012345

据我所知,今年早些时候它只是一个普通的类似 URL 片段的字符串(以 开头#),没有感叹号。但现在它是 shebang 或 hashbang ( #!),我以前只在 shell 脚本和 Perl 脚本中看到过。

新的Twitter URL 现在也包含这些#!符号。例如,Twitter 个人资料 URL 现在如下所示:

http://twitter.com/#!/BoltClock

现在是否#!在 URL 中扮演了一些特殊的角色,比如对于某个 Ajax 框架或什么,因为新的 Facebook 和 Twitter 界面现在主要是 Ajaxified?
在我的 URL 中使用它会以任何方式使我的 Web 应用程序受益吗?

0 投票
2 回答
875 浏览

ajax - 使用 Ajax 历史记录和书签时,使用“#!”总是好的吗?而不仅仅是“#”?

Facebook 正在使用 Ajax 历史记录(后退和前进按钮)和书签,#!而不仅仅是#在 URL 中。这样做总是一个好主意吗,因为我认为通常的锚点可能会干扰 Ajax 历史机制以触发它处理普通锚点。

因此,Ajax History 函数只会在看到时才处理哈希部分,#!而不仅仅是#.

并且使用!与主流浏览器兼容?如果 Facebook 正在使用!,则猜测它可能会得到很好的支持。

0 投票
4 回答
3502 浏览

javascript - hashbang 斜线还是没有斜线?

我们应该做site.com/#!/blog还是site.com/#!blog

我知道没有实际的区别,但是作为一个 web 开发者社区,仍然应该有一个传统的标准,以便用户可以轻松记住 url。如果没有已经建立的标准,理想情况下,有人会发布一个支持一个人的答案,有人会发布另一个支持另一个人的答案,一个人会比另一个人获得更多的选票......

我个人更喜欢:site.com/#!blog仅仅因为它更短。但是,我看到许多其他网站使用其他变体。

顺便说一句,如果您的第一直觉是指示我们不要使用 hashbangs,那么这个问题不适合您,请不要理会我们。

0 投票
1 回答
1319 浏览

ajax - 我应该使用 hashbang/shebang 吗?

我在这里读到shebang(#!)的想法是如此谷歌

知道存在提供相同页面“状态”的替代常规 URL

所以,如果我没有与这些哈希状态相对应的常规 URL,我是否应该说我应该只使用哈希而不是 shebang?

背景:哈希是基于搜索表单创建的,搜索结果加载在同一页面上。散列在那里,以便人们可以返回带有散列的 URL 并重复相同的搜索。

更广泛地说,我应该有理由吗有与我的哈希相对应的真实 URL 吗?

0 投票
2 回答
1322 浏览

.htaccess - .htaccess mod_rewrite 变量通过重定向

简洁版本:

我写了这个问题,并意识到大多数人不想阅读那么多文字。考虑以下参考,这里是 TL;DR:

我需要 301 重定向这个 urlhttp://app.com/search/foo-bar/

到这个网址http://app.com/#!/search/foo-bar/

并将 this:/foo-bar/或其他任何内容发送/search/到服务器端脚本。在这种情况下,它是用 php.ini 编写的。

为清楚起见进行编辑:

当前的答案似乎集中在对 hashbang 的重写上。那部分不是问题。问题是我在重写到 hashbang url 时会丢失任何相关数据,因为服务器端会将 app.php 视为位置,而不是 app.php/#!/foo-bar/ - 所以我需要捕获 foo-bar , 并将其发送到 URL 以外的其他位置的服务器。重写有效,不是问题。不过感谢您的回答!


长版:

好的,所以我有一个有趣的问题,我很难弄清楚。

场景:

我有一个使用 hashbang 表示状态的主干.js 应用程序:

app.com/#!/search/search-term/key-value/foo-bar/

此外,我有来自以前版本的网站的谷歌流量将点击“漂亮的网址”样式网址:

app.com/search/search-term/key-value/foo-bar/

如果用户点击旧 url,我使用 .htaccess mod_rewrite 将旧 url 换成 hashbanged 。

我最近介绍了该站点的无 javascript 引导版本,该站点将建立在该站点之上,以优雅地降级和支持爬虫。这是使用 php 编写的。

为了使 php 站点正常工作,我需要将 hashbang 之后的值传递给服务器端脚本,以便弄清楚要显示的内容。

问题:

当我转换一个 url 并添加一个锚点时,锚点(hashbang)之后的所有内容都不再发送到请求,所以我无法在 php.ini 中访问它。

RewriteRule search/?(.*) #!/search/$1 [R=301,NC,L]

然后我将东西发送到服务器端的选项减少为:1.查询字符串 2.环境变量 3.标头

所以,我尝试通过查询字符串发送东西

RewriteRule search/?(.*) #!/search/$1?filter=$1 [R=301,NC,L]

显然这不起作用(查询在锚点后面),所以我在 hashbang 前面尝试了它

RewriteRule search/?(.*) ?filter=$1/#!/search/$1 [R=301,NC,L]

这行得通,但对最终用户来说是可怕的和多余的。所以,我想我可以尝试使用环境变量。

RewriteRule search/?(.*) /!#/search/$1 [R=301,NC,L,E=FILTER:$1]

那失败了,因为环境变量没有通过重定向(duh)保留。我转向使用标题:

RewriteRule search/?(.*) /#!/search/$1 [R=301,NC,L,E=FILTER:$1]

Header set filterParams "%{FILTER}e"

但是由于某种原因,页面没有通过重定向接收到标头。这似乎是有道理的(虽然我现在已经远远超出了我对 apache 指令的舒适程度),所以我尝试回显标题,希望它会被传递,被第二次重写接收(没有找到搜索),并回响。

RewriteRule search/?(.*) /#!/search/$1 [R=301,NC,L,E=FILTER:$1]

Header set filterParams "%{FILTER}e"

Header echo filterParams

Nada - 过滤器不存在,所以虽然它到达服务器,但它是空的。我的下一个想法是尝试使用某种条件。这是我的尝试:

这似乎也不起作用,所以我很难过。我意识到我在这方面花了很长时间,以至于我可能已经掌握了解决方案,我只是厌倦了看它,或者它甚至不可能,即使有严重的标题黑客攻击。

任何人都知道如何做到这一点?

0 投票
2 回答
933 浏览

url - URL 约定中的这个新的 `#!` 是什么?

可能重复:
Facebook 和新 Twitter URL 中的 shebang/hashbang (#!) 是什么?

我注意到一些流行的网站开始切换到新的 URL(约定?),其中 URI 段不再以 . 为前缀,/而是以#!/.

例如,如果您输入 Twitter http://twitter.com/stackoverflow,它会立即重定向到http://twitter.com/#!/stackoverflow.

如果我只在 Twitter 上看到这个,我不会三思而后行,但现在我在其他网站上看到了这个。

这是 URL 重定向的新约定吗?我在哪里可以了解更多信息?

0 投票
3 回答
22044 浏览

javascript - pushState 和 SEO

很多人一直在说,使用 pushState 而不是 hashbang。

我不明白的是,如果不使用 hashbang,您将如何对搜索引擎友好?

大概您的 pushState 内容是由客户端 JavaScript 代码生成的。

因此,情况是:

我在example.com。我的用户点击一个链接:href="example.com/blog"

pushState 捕获点击,更新 URL,从某处获取 JSON 文件,并在内容区域创建博客文章列表。

使用 hashbangs,谷歌知道去 escaped_fragment URL 来获取他们的静态内容。

使用 pushState,Google 什么也看不到,因为它不能使用 JavaScript 代码加载 JSON 并随后创建模板。

我可以看到的唯一方法是在服务器端呈现模板,但这完全否定了将应用程序层推送到客户端的好处。

所以我说对了吗,pushState 对客户端应用程序根本不友好吗?

0 投票
1 回答
4048 浏览

jquery - Hashbang 和转义片段

所以我一直在调查整个 SEO AJAX malarkey,并在这里设置了一个测试页面:我的网站

我使用了来自 GitHub 的示例代码,如您所见,hashbang#!工作正常,但请尝试访问任何将 hashbang 替换?_escaped_fragment_为 Google 会解释的页面。在一定程度上,页面无法加载。主页加载。

我猜这是两件事之一,也许两者兼而有之:

  1. 没有 HTML 快照
  2. 代码错了。。

或者我没有得到这个..

我使用的代码在这里:https ://github.com/bartaz/jquery-address/tree/master/samples/crawling

有什么帮助吗?

0 投票
1 回答
625 浏览

php - escaped_fragment 请求不解析 php?

所以最近我按照谷歌的 AJAX 抓取方法重建了我的网站。

一切正常,?_escaped_fragment_=请求正常,但我注意到页面上的任何 php 都没有被解析并被注释掉,如下所示:<!--?php echo $myvar ?-->

有谁知道为什么会发生这种情况?这是我索引中的一些 PHP:

我注意到那里有一个正则表达式。也许这与它有关?我不能完全理解这里发生了什么,我不是专家。如果它会保持这种状态,就不要完全想把我的网站备份起来..

请在这里帮我一把

0 投票
1 回答
3194 浏览

javascript - 使用 javascript (phantomjs) 导航/抓取 hashbang 链接

我正在尝试下载几乎完全由 JavaScript 生成的网站的 HTML。所以,我需要模拟浏览器访问并且一直在玩PhantomJS。问题是,该站点使用 hashbang URL,我似乎无法让 PhantomJS 处理 hashbang——它只是不断调用主页。

该网站是http://www.regulations.gov。默认将您带到#!home。我尝试使用以下代码(来自此处)来尝试处理不同的 hashbang。

此代码生成正确的 hashbang(例如,我可以将 hash 设置为 '#!contactus'),但它不会动态生成任何不同的 HTML——只是默认页面。但是,它确实正确输出了我调用document.location.hash.

我也尝试将初始地址设置为 hashbang,但是脚本只是挂起并且没有做任何事情。例如,如果我将 url 设置http://www.regulations.gov/#!searchResults;rpp=10;po=0为脚本,则在将地址打印到终端后挂起,并且什么也没有发生。