【问题标题】:Youtube embed link not displaying in RailsYoutube 嵌入链接未在 Rails 中显示
【发布时间】:2012-02-20 18:24:27
【问题描述】:

我正在为 youtube 视频制作资源丰富的路线。因此,一个人只需将 youtube 嵌入链接粘贴到表单中。在控制器中,我有一组正常的足智多谋的操作:

class VideosController < ApplicationController
  def index
    @videos = Video.all
  end

  def new
    @video = Video.new
  end

  def create
    Video.create(params[:video])
    redirect_to :action => :index
  end

  def destroy
    Video.destroy(params[:id])
    redirect_to :action => :index
  end
end

在视图中我只是显示它:(在 Haml 中)

- @page_title = 'Video'

#videos
  %ul
    = list_of(@videos) do |video|
      %h1= video.title
      != video.link
      = link_to "Delete", video_path(video), :method => :delete

  = link_to "Add new video", new_video_path

  %p#top
    = link_to 'Go to top ↑', '#'

对于不使用 Haml 的人,!= 会转义字符串。 video.link 保存 YouTube 嵌入代码

问题是,当我创建一个新视频并将我重定向回索引页面时,新创建的视频不显示(其他视频正常显示)。刷新页面后才正常显示。

我在网络检查器中看到iframe 中缺少src 属性(这就是不显示视频的原因)。但是当我查看页面源时,那里一切正常。所以,认为这可能是 Javascript 的错,我尝试禁用它。但什么都没有改变。

【问题讨论】:

  • 您写了And in the view I'm just displaying it. -- 仅此而已...请为您正在使用的 iframe 或 javascript 小部件添加视图代码
  • 当您被重定向到#index 时,是否显示标题和/或删除链接?另外,是否有任何后台处理在创建记录后对其进行更新?
  • video.link 是 iframe 代码吗?您仍然没有显示您正在使用的 iframe 代码......
  • 显示所有链接。不,没有后台进程(只有一名管理员,所以我认为没有必要)。关于video.link,是的,它包含一个YouTube 嵌入链接,例如&lt;iframe width="640" height="360" src="http://www.youtube.com/embed/kWakZcEGB38" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

标签: ruby-on-rails iframe youtube embed


【解决方案1】:

我不认为你想用 haml 来逃避它......我想你想打电话

video.link.html_safe

注意:如果用户在链接中粘贴,这是非常不安全的。

更新 --- 如果你打开了 javascript 开发控制台,你会看到这个错误弹出:

**Refused to execute a JavaScript script. Source code of script found within request.**

检查this answer for why it's refusing to due XSS 这是一种既安全又有效的方法。您将在文本字段中粘贴 youtube ID:ibWYROwadYs

index.erb

<% if session[:youtube].present? %>
  <iframe width="480" height="360" src="http://www.youtube.com/embed/<%=session[:youtube]%>" frameborder="0" allowfullscreen></iframe>
<% end %>

<%= form_tag load_path do %>
  <%= text_field_tag :youtube_id %>
  <%= submit_tag "Submit" %>
<% end %>

<%= link_to "Clear", clear_path, :method => :delete %>

home_controller.rb

class HomeController < ApplicationController
  def index
  end

  def smth
    session[:youtube] = params[:youtube_id]
    redirect_to :action => :index
  end

  def clear
    session.clear
    redirect_to :action => :index
  end
end

【讨论】:

  • 谢谢,我会记住的。我不担心安全问题,因为只有管理员才能访问它。我正在为那个人制作网站,所以我只是在做一个基本的 CMS。
  • 它没有用。对不起,我忘了我必须告诉你,而不是不接受。
  • 你能=debug video.link 吗?这会告诉你链接是否存储在数据库中。
  • 是的,它存储在数据库中(我提到它会在您重定向到#index 后刷新时出现)。如果我输入自定义文本而不是 YouTube 嵌入链接,则不会发生此问题。我 100% 确定它与 iframe 有关。哇,我只是尝试以最简单的方式重现问题,创建一个新的 rails 项目,添加一个“home”控制器,只更改this 代码(以防万一),仍然存在该错误.尝试做类似的事情,你应该得到同样的结果。
  • 我刚刚发现了一些有趣的事情。如果我使用将 youtube 嵌入链接放入会话中的操作的简单链接而不是表单,则不会发生此问题。
猜你喜欢
  • 1970-01-01
  • 2013-06-29
  • 2014-03-20
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 2012-04-11
相关资源
最近更新 更多