我正在构建一个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] 删除。
我来说两句