javascript - Durandal 2.0 router 你能把#换成#吗!用于 ajax 网络爬虫目的?

标签 javascript jquery ajax single-page-application durandal

是否可以替换 Durandal 2.0 中的默认路由器行为以替换默认路由,例如:'mysite.com/#/myroute' 为 'mysite.com/#!/myroute' 原因是为了为了让 google spider 检测到该页面是 ajax 可爬网的,我需要在 url 中插入一个 hashbang 而不仅仅是一个 hashtag。任何帮助将不胜感激。

谢谢!

最佳答案

据我所知,在 Durandal 2.0 中你无法做到这一点。 routerhistory 插件不支持这个,而且这不是一个简单的修复,因为代码中有一些地方依赖于 #.

但是,我认为这在您的场景中不是问题。也许您需要改变方式来处理使您的应用程序可抓取的要求。

您仍然可以通过在应用程序的主 HTML 中指定元片段类型,使用 # 使您的应用程序 SEO 兼容:

<meta name="fragment" content="!">

因此,您告诉谷歌您的链接没有 #!,但应用程序正在使用 JavaScript 呈现。然后来自爬虫的请求将包括 ?_escaped_fragment_

因此在您的应用中您将使用:

mysite.com/#myroute

爬虫会请求:

mysite.com?_escaped_fragment_=myroute

查看 Google 的第 3 部分 documentation on crawling了解有关元片段标记的更多信息。

建议

如果你想充分利用这个特性,我建议在 Durandal 2.0 中通过像这样激活路由器来使用 pushState:

router.activate({ pushState: true } );

还包括元片段标记。

 <meta name="fragment" content="!">

使用 pushState 时应考虑的事项:

  • 仅当您不打算支持旧浏览器时才使用 pushState。

  • 您需要让您的服务器端 pushState 准备就绪,这意味着当使用 mysite.com/myroute 请求服务器时,应该能够返回相同的 JS 应用程序并且让客户端处理查询字符串参数。例如,如果您使用的是 ASP.NET,这可以使用 IIS URL 重写来实现。有个好blog post关于这个话题。

关于javascript - Durandal 2.0 router 你能把#换成#吗!用于 ajax 网络爬虫目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18428192/

相关文章:

javascript - AJAX、PHP 表单未提交到数据库

javascript - 替代 AJAX 异步 : false option for form submit button click event handler

javascript - 垂直对齐到聊天页面和页面滚动的底部

javascript - 根据浏览器加载不同版本的jquery

带有填充的Javascript数组随机播放

javascript - 如何区分 typescript 索引签名和 JS 计算属性名称

javascript - jQuery 中延迟对象中的 resolved 和 rejected 是什么意思?

javascript - 使用 JQuery 为 HTML 表格单元格分配值

javascript - 在代码中避免使用 if else

php - 实时 AJAX 搜索手机号码