问题标签 [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.
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 应用程序受益吗?
ajax - 使用 Ajax 历史记录和书签时,使用“#!”总是好的吗?而不仅仅是“#”?
Facebook 正在使用 Ajax 历史记录(后退和前进按钮)和书签,#!
而不仅仅是#
在 URL 中。这样做总是一个好主意吗,因为我认为通常的锚点可能会干扰 Ajax 历史机制以触发它处理普通锚点。
因此,Ajax History 函数只会在看到时才处理哈希部分,#!
而不仅仅是#
.
并且使用!
与主流浏览器兼容?如果 Facebook 正在使用!
,则猜测它可能会得到很好的支持。
javascript - hashbang 斜线还是没有斜线?
我们应该做site.com/#!/blog
还是site.com/#!blog
?
我知道没有实际的区别,但是作为一个 web 开发者社区,仍然应该有一个传统的标准,以便用户可以轻松记住 url。如果没有已经建立的标准,理想情况下,有人会发布一个支持一个人的答案,有人会发布另一个支持另一个人的答案,一个人会比另一个人获得更多的选票......
我个人更喜欢:site.com/#!blog
仅仅因为它更短。但是,我看到许多其他网站使用其他变体。
顺便说一句,如果您的第一直觉是指示我们不要使用 hashbangs,那么这个问题不适合您,请不要理会我们。
ajax - 我应该使用 hashbang/shebang 吗?
我在这里读到shebang(#!)的想法是如此谷歌
知道存在提供相同页面“状态”的替代常规 URL
所以,如果我没有与这些哈希状态相对应的常规 URL,我是否应该说我应该只使用哈希而不是 shebang?
背景:哈希是基于搜索表单创建的,搜索结果加载在同一页面上。散列在那里,以便人们可以返回带有散列的 URL 并重复相同的搜索。
更广泛地说,我应该有理由吗有与我的哈希相对应的真实 URL 吗?
.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 - 过滤器不存在,所以虽然它到达服务器,但它是空的。我的下一个想法是尝试使用某种条件。这是我的尝试:
这似乎也不起作用,所以我很难过。我意识到我在这方面花了很长时间,以至于我可能已经掌握了解决方案,我只是厌倦了看它,或者它甚至不可能,即使有严重的标题黑客攻击。
任何人都知道如何做到这一点?
url - URL 约定中的这个新的 `#!` 是什么?
我注意到一些流行的网站开始切换到新的 URL(约定?),其中 URI 段不再以 . 为前缀,/
而是以#!/
.
例如,如果您输入 Twitter http://twitter.com/stackoverflow
,它会立即重定向到http://twitter.com/#!/stackoverflow
.
如果我只在 Twitter 上看到这个,我不会三思而后行,但现在我在其他网站上看到了这个。
这是 URL 重定向的新约定吗?我在哪里可以了解更多信息?
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 对客户端应用程序根本不友好吗?
jquery - Hashbang 和转义片段
所以我一直在调查整个 SEO AJAX malarkey,并在这里设置了一个测试页面:我的网站
我使用了来自 GitHub 的示例代码,如您所见,hashbang#!
工作正常,但请尝试访问任何将 hashbang 替换?_escaped_fragment_
为 Google 会解释的页面。在一定程度上,页面无法加载。主页加载。
我猜这是两件事之一,也许两者兼而有之:
- 没有 HTML 快照
- 代码错了。。
或者我没有得到这个..
我使用的代码在这里:https ://github.com/bartaz/jquery-address/tree/master/samples/crawling
有什么帮助吗?
php - escaped_fragment 请求不解析 php?
所以最近我按照谷歌的 AJAX 抓取方法重建了我的网站。
一切正常,?_escaped_fragment_=
请求正常,但我注意到页面上的任何 php 都没有被解析并被注释掉,如下所示:<!--?php echo $myvar ?-->
有谁知道为什么会发生这种情况?这是我索引中的一些 PHP:
我注意到那里有一个正则表达式。也许这与它有关?我不能完全理解这里发生了什么,我不是专家。如果它会保持这种状态,就不要完全想把我的网站备份起来..
请在这里帮我一把
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
为脚本,则在将地址打印到终端后挂起,并且什么也没有发生。