问题标签 [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.
ajax - 如何使用 hashbang url 处理 Facebook 分享/点赞?
我正在构建一个网站,我将从主页打开网站上的一些其他 URI 到灯箱(AJAX)中,我想使用 HTML5 推送状态和哈希爆炸作为后备来管理状态的变化。
现在我希望这些网址可以抓取并且 Facebook 可以分享/喜欢..
如果用户浏览器支持 HTML5 推送状态,没问题,他可以分享 URL(例如 : http://myserver/example
),Facebook 会在静态内容中找到合适的 OG 元数据。
但是如果用户使用 HTML4 浏览器,他将有一个类似http://myserver/#!/example
. 无论如何我希望他能够通过Facebook分享它......
现在看起来 Facebook 支持 _escaped_fragment_ 替换方法,所以我只是将请求从http://myserver/?_escaped_fragment_=/example
to重定向http://myserver/example
,每个人都应该很高兴......</p>
所以我在我的 htaccess 中添加了一个重写条件:
我的问题是我不能让它与 Facebook 一起工作,使用 Facebook linter 它似乎总是在 hashbang 之后的 URL 部分一直进行百分比转义,导致 url 像
http://myserver/%2Fexample
which 降落到 404 :-(
有人知道如何欺骗 Facebook 不转义这部分 URL 吗?我可以在 apache mod_rewrite 方面做点什么吗?
我也对任何其他有效的 ajax 可抓取/可取的 URL 策略持开放态度;)
php - 带有转义片段 URL 的 jQuery 动画(hash-bang,#!)
我的网站设置如下:当页面加载时,会播放一个 jQuery 动画——在模板中——完成后,它会进一步调用 Ajax 来获取页面的内容。现在,我想部署像http://com-address/#!page这样的 hashbang ,我还需要在页面加载时保留动画。但我认为这个设置的问题是;当网络爬虫访问页面时,它不会等待动画完成并进行 Ajax 调用。它需要加载内容的页面状态(在我的情况下是在动画完成后获取的)。
鉴于上述情况,哪种方式更好:
更改整个流程并抢先加载页面内容并将其隐藏直到播放动画。
仅当在 URL 中找到 hash-bang 或 _escaped_fragment 时:
一种。按照步骤 1。
湾。加载没有动画内容的页面。
我对网络爬虫的假设是不正确的,让当前流动。
有什么建议吗?
编辑
@kdzwinel,感谢您提供有关文本浏览器的提示!
再想一想,我会选择选项 2(a),因为当爬虫访问带有碎片 URL 的资源时,它应该在页面上获得完整的结果内容。如果用户直接导航到碎片化的 URL,用户对动画的体验也会保持不变(通过在页面加载和动画开始之间删除动态内容片段上的内容)。
同样对于所有其他场景,我们将继续旧流程(动画然后通过 Ajax 获取),因为我们不想刷新页面,因为用户已经在访问网站并尝试使用带有碎片 URL 的锚进行平滑/无缝导航(绑定他们的点击事件开始动画)。
javascript - 简单的 ajaxify,没有 hash 或 hashbang url
我正在学习网页设计课程。我和很多其他学生都对 ajaxifying 我们的工作很感兴趣。我们的老师只对设计和 HTML 感兴趣——所以他帮不上忙。
我希望我使用正确的术语 - 否则请纠正我。通过ajaxifying,我的意思是让我的网页在导航时只更新某些部分。
例如,假设我有一个包含 3 个子页面的网页:
1:索引.html
2:项目.html
3:联系人.html
使用链接时:
只有 Content-div 应该重新加载。
菜单应该更新哪个菜单点是活动的(这里用粗体标签显示)。如果这太复杂了,可以重新加载菜单。
根本不应该重新加载页脚。
标题应该更新。
网址应该更新。
我真的希望网址干净。也就是说:不是/#projects.html或/#/projects.html,而是直接/projects.html或/projects
工作书签和后退按钮至关重要。
这可能吗?我将永远疯狂地感谢任何在这里帮助我的人!:-D 我已经尝试过(并使用过)jQuery 地址和历史插件、History.js和它的“要点”。无法让它工作。我已经拖网和拖网堆栈溢出和谷歌,但似乎找不到任何人解释这些事情或有一个简单的解决方案。
针对现代网络浏览器的解决方案会很好。如果 IE 和没有 javascripts 的人只得到简单的 html 版本,那会很酷 - 但这不是绝对必要的。
请帮助 - 任何帮助将非常非常感激!谢谢!:-)
javascript - 我不应该使用backbone.js,因为它使用hashbangs吗?
我是backbone.js 的新手,喜欢构建javascript 的想法。但是,我读过它依赖于 Twitter 试图根除的 hashbangs。
所以我的问题是我不应该因此使用backbone.js吗?
ajax - 了解 Googlebots AJAX 抓取
我浏览过 Google 的文档和无数关于这个主题的博客文章,根据日期和来源,似乎有一些相互矛盾的信息。请把你的智慧照耀在这个卑微的农民身上,一切都会好起来的。
我正在免费建立一个网站,其中很大一部分观众来自互联网连接较差的非洲国家,而客户负担不起任何体面的基础设施。因此,我决定将所有内容都作为静态 html 文件提供服务,如果 javascript 可用,我会在用户单击导航链接时将页面内容直接加载到 DOM 中,以防止加载整个页面的开销。
我的客户端路由如下所示:
//domain.tld/#!/page
我的第一个问题是;googlebot 是否将其翻译为:
//domain.tld/_escaped_fragment_/page
还是//domain.tld/?_escaped_fragment_=/page
?
我在 php 中制作了一个简单的服务器端路由器,它为 googlebot 构建请求的页面,我的计划是重定向//d.tld/_escaped_fragment_/page
到//d.tld/router/page
.
但是当使用 Google 的“Fetch as Googlebot”(我可能是第一次添加)时,它似乎无法识别页面上的任何链接。它只是返回“成功”并向我显示主页的 html(更新:当将 Fetch as Googlebot 指向//d.tld/#!/page
它时,它只返回主页的内容,而不做任何 _escaped_fragment_ 魔术)。这引出了我的第二个问题:
使用 hashbang 链接时,我是否需要遵循特定的语法,以便 googlebot 抓取它们?
我的链接在 HTML 中如下所示:
Update1:因此,当我要求 Fetch as Googlebot 将//d.tld/#!/page
其显示在访问日志中时:"GET /_escaped_fragment_/page HTTP/1.1" 301 502 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
但它似乎不遵循我设置的 301,而是显示主页。我应该改用302吗?这是我正在使用的规则:RedirectMatch 301 /_escaped_fragment_/(.*) /router/$1
Update2:我改变了我的计划,并将 googlebot 作为我非 JavaScript 后备策略的一部分。所以现在所有的链接都指向路由器/router/page
,然后/#!/page/
用javascript更改为onLoad。我会暂时保留这个问题,以防有人有一个可以帮助其他人的绝妙解决方案。
hashbang - 对于某些网站 URL 中使用的内容和与 /#!/ 相关的技术
我很好奇/#!/在 Twitter 或 about.me 等网站中使用的表达方式。
一些例子: http: //twitter.com/# !/search/programmer http://about.me/search/#!/tag/programmer
我想知道是否有特定的技术可以使用它,比如框架或编程语言。
javascript - 做 Twitter、Hash-Bang # 之类的链接!网址的
我想知道 Twitter 是如何工作的。
如果您查看源代码,您使用的链接类似于 /#!/i/connect 或 /#!/i/discover,但它们没有附加 JavaScript 函数,如 load('connect')或其他东西,并且它不需要重新加载页面。它只是改变了页面内容。
我看到了这个页面,但是所有这些文件都必须存在,你不能直接进入其中一个。我想在 Twitter 上,这些文件中的每一个都不存在,而是以其他方法处理的。不过,如果我错了,请纠正我。
有没有办法可以复制这种效果?如果是这样,是否有关于如何执行此操作的教程?
javascript - 使用 #! 使哈希可抓取!并在变化中幸存下来
我正在尝试通过将 # 更改为 #! 来使我的网站可抓取。单击链接时该页面工作正常,但我无法修复直接从 URL 调用哈希的脚本。
这就是我所拥有的
头
身体
当我点击 foo 时,内容加载正常,但如果我用 www.foo.com/#!foo 调用我的网站,它不会加载内容。
谁能指导我?
url - 如果尚未存在,则将 hashbang 添加到 URL
问题
我已经使用 #! 启动并运行了我的网站!URL 和 PathJS 运行良好。当某人链接到已经包含包含 hashbang 的正确 URL 结构的 URL 时,它可以正常工作。
我遇到的唯一问题是当用户访问 URL 中没有 hashbang 的页面时,它需要附加 hashbang 然后重新加载页面,或者希望触发 PathJS 来检测正确的 URL 结构并按照我说的做它到。
例子
访问http://twitter.com/google
将拦截该 URL,将其更改为http://twitter.com/#!/google
然后加载适当的内容。
ajax - 可抓取的 Ajax 内容。没有 hashbang 的 SEO。我的方法好吗?
我将基于 ajax 构建我的应用程序,我的 URL 类似于:
在参考了一些关于 google 建议的讨论后:hashbang (#!),我不难意识到这不是最好的解决方案。有几个原因:
- 无论如何,URL 非常难看。
- 如果有一天谷歌(或其他一些搜索引擎)提出了一个比 hashbang 更好的解决方案,那就太糟糕了。我必须用 hashbang 保留我丑陋的 url,或者编写一些 js 代码来使指向我的页面的链接仍然有效。
- HTML5 pushState 总有一天会流行起来。
对于上述所有事情,我决定按照自己的方式进行:我的导航链接将是这样的:
一些 jQuery 代码将使其能够加载 ajax 内容,而不是像普通链接那样进行页面更改:
当爬虫读取我的页面时,它会跟随“href”属性中的url,我会提供我页面的静态非js版本供google阅读。几天后,我的页面被编入索引,用户将在 Google 的搜索结果中看到我的页面,如下所示:
我将再次使用用户 js 将用户重定向到我的正常 ajax 版本,我的意思是,到真正的 URL:
这是我目前能想到的最好的方法。请给我建议:我应该这样做,还是可以做得更好?谢谢大家!