14

我有一个启用了 turbo-links 的 Rails 4 应用程序,但是在更改页面时我无法刷新元标记(不是完全刷新)。我读到需要在加载涡轮链接的 javascript 之前包含元标记,但它没有效果。完全刷新可以完成这项工作,但不幸的是这不是我要搜索的。

布局/application.html.haml

%html
  %head
    %title= "Title"
    - if content_for?(:meta_description)
      %meta{content: (yield :meta_description), name: "description"}/
      %meta{content: (yield :meta_keywords), name: "keywords"}/
    = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true 
    = javascript_include_tag "application", "data-turbolinks-track" => true

    = csrf_meta_tags
  %body{class: params[:controller].gsub("/", "-"), id: 'top'}
    = render "shared/header"
    .body-content
      = render "shared/flash"
      = yield
    = render "shared/footer"
    = render "shared/analytics"

助手/application_helper.rb

def meta_tag(标题,描述)

content_for :meta_keywords do
  title
end

content_for :meta_description do
  description
end   

结尾

我就是这样称呼他们的

= meta_tag('here s my title', 'and the keywords')

谢谢

4

4 回答 4

23

Turbolinks 的工作原理

Turbolinks 旨在保持<head>标签相同,只是<body>通过 AJAX 请求将标签替换为所请求页面的内容。由于您的<meta>标签位于 中<head>,因此不会通过 Turbolinks 请求更改它们。

搜索引擎优化呢?

从 SEO 的角度来看,您无需担心<meta>在 Turbolinks 请求上更新标签,因为搜索引擎爬虫将始终执行整页请求并且不会执行 Turbolinks javascript。

从用户的角度来看,<head>每个请求中唯一需要更改的标签就是<title>标签,因此 Turbolinks 本身内置了对它的特殊处理。

这种行为会改变吗?

这个“问题”已经被提出并击落了几次,每次都被 DHH 自己宣布为非问题,所以我不会指望这种行为会很快改变。

看:

于 2014-02-27T04:13:06.303 回答
2

这是一个 TurboLinks 问题

按照设计,Turbolinks 基本上保持您的页面相同,如果要保持不变(您使用相同的控制器/操作),则通过 ajax<head>调用您的文档。<body>保持应用程序性能是一件很疯狂的事情

这是Turbolinks的一个很好的解释


我在使用 Javascript 时遇到了类似的问题,并且能够使用Jquery-Turbolinks gem 来保持 JS 渲染

对于您的元标记,虽然我不知道手头的解决方案,但我设法找到了一个不错的宝石,您可能会从中受益:MetaMagic. 它允许您在视图中定义元标记,有点像 content_block 工具的工作方式。这应该在每个 http 请求上加载

于 2013-10-19T09:28:36.217 回答
1

我扩展了当前的 turbolinks js ;)

它将替换元标记和规范链接!

https://github.com/philklei/turbolinks

于 2014-05-27T05:44:03.673 回答
0

看看元标签 gem

“与 pjax 一起使用”部分

于 2014-02-27T03:10:32.103 回答