cco*_*rin 10 javascript ajax jquery single-page-application durandal
是否有可能替换Durandal 2.0中的默认路由器行为来替换默认路由,例如:'mysite.com/#/myroute'与'mysite.com/#!/myroute'的原因是为了谷歌蜘蛛检测页面是ajax爬行能力,我需要在url中插入一个hashbang而不仅仅是一个hashtag.任何帮助将不胜感激.
谢谢!
据我所知,在Durandal 2.0中你无法做到这一点.在router和history插件不支持这一点,因为在代码依赖于一些地方它不会是一个简单的办法#.
但是,我不认为这是您的方案中的问题.也许您需要改变处理使应用程序可抓取的要求的方式.
您仍然可以通过在应用程序#的主HTML中指定元片段类型来使您的应用程序SEO兼容:
<meta name="fragment" content="!">
Run Code Online (Sandbox Code Playgroud)
因此,您告诉谷歌您的链接没有,#!但应用程序正在使用JavaScript呈现.然后来自爬虫的请求将包括
?_escaped_fragment_.
所以在你的应用程序中你将使用:
mysite.com/#myroute
Run Code Online (Sandbox Code Playgroud)
并且爬虫将请求:
mysite.com?_escaped_fragment_=myroute
Run Code Online (Sandbox Code Playgroud)
查看有关抓取的Google 文档的第3部分,了解有关元碎片标记的更多信息.
建议
如果你想充分利用这个功能,我建议通过激活路由器在Durandal 2.0中使用pushState:
router.activate({ pushState: true } );
Run Code Online (Sandbox Code Playgroud)
还包括meta fragment标签.
<meta name="fragment" content="!">
Run Code Online (Sandbox Code Playgroud)
使用pushState时应该考虑的事项:
仅在您不打算支持旧浏览器时才使用pushState.
您需要使服务器端pushState准备就绪,这意味着当请求服务器时mysite.com/myroute应该能够返回相同的JS应用程序并让客户端处理查询字符串参数.例如,如果您使用的是ASP.NET,则可以使用IIS URL重写来实现.关于这个主题有一篇很好的博客文章.
| 归档时间: |
|
| 查看次数: |
900 次 |
| 最近记录: |