允许用户将我的内容嵌入其网站(例如博客)中-rails 4

ruby_n00b

我正在构建一个Rails 4应用程序,我想为用户提供通过可嵌入代码将我的内容嵌入到他们自己的网站(例如他们的博客)中的选项。

换句话说,我想创建一个带有一些内容的erb页面,并显示一个“嵌入”按钮。当用户单击该按钮时,将出现一小部分可嵌入的代码,可以将其复制并粘贴到其博客中,等等。这将显示我页面的内容。

最好的方法是什么?请尽量描述一下,因为我是新来的。谢谢!

理查德·派克

iFrame

使用当前技术实现此目标的方法通常是使用iframe客户端网站上的JS调用。您必须确保设置了正确的CORS策略(以允许来自远程站点的连接)


从高角度来看,这是您的处理方式:

#config/routes.rb
namespace :embed do
   resources :pages, only: :show, path: "" # -> domain.com/embed/1
end

这将为您提供所谓的端点-您将能够从客户端网站指向端点(嵌入代码)。从本质上讲,它将使您能够使用JS小部件与your_domain.com/embed/:blog_post_number

然后可以使用相应的控制器进行处理:

#app/controllers/embed/pages_controller.rb
class PagesController < ApplicationController
   layout false
   def show
      @page = Page.find params[:id]
   end
end

#app/views/embed/pages/show.html.erb
<%= @page.title %>

这将呈现控制器show方法,方法pages将呈现没有布局的相应视图。这不会单独执行任何操作,但是如果您从javascript小部件正确调用它,则可以在iFrame中显示它


JS

因此,您将需要一个小部件来“嵌入”您的代码。执行此操作的典型方法是创建一个JavaScript“小部件”,该小部件将驻留在您的服务器上(在public目录中)。然后,当用户嵌入代码时,您将提示用户调用此脚本:

#public/embed.js
window.onload = function() {

   //Params
   var scriptPram = document.getElementById('load_widget');
   var id = scriptPram.getAttribute('data-page');

   /iFrame
   var iframe = document.createElement('iframe');
   iframe.style.display = "none";
   iframe.src = "embed/" + id;
   document.body.appendChild(iframe);
};

然后,您将提示用户嵌入以下JS:

<script id="load_widget" src="http://domain.com/embed.js" data-page="1"></script>

这是一个很好的资源

最重要的目的是提供在用户网站上嵌入iframe的功能,最终将调用您的domain.com/embed/:id网址

上面的代码可能有点肿(Youtube只是让您iframe直接在您的网站上放一个“裸” )。如何执行将取决于您要拥有的复杂性以及您计划的将来的可扩展性


CORS

最后,您需要管理“ CORS”(跨源资源共享策略)这是一个标准协议,从本质上防止任何来自非原始域的XHR请求。

使用CORS的原因是,它可以防止XHR上的匿名请求攻击您的服务器。我不确定它的深层结构含义-但您绝对需要确保在服务器上设置了CORS策略,以允许调用/显示嵌入的页面。

在Rails中最有效的方法是使用RACK-CORS gem

#config/application.rb
config.middleware.use Rack::Cors do
  allow do
     origins '*'
     resource '/embed.js', :headers => :any, :methods => [:get, :post, :options] #-> I believe resource needs to be a specific URL - will have to check this
  end
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章