使用Rails生成Javascript代码
我目前正在开发一个web应用程序,它可以生成可以附加到另一个页面的JS代码。就像从下面的表单生成器生成的电子邮件订阅表单一样:使用Rails生成Javascript代码,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我目前正在开发一个web应用程序,它可以生成可以附加到另一个页面的JS代码。就像从下面的表单生成器生成的电子邮件订阅表单一样: <script type="text/javascript" src="https://app.getresponse.com/view_webform_v2.js?u=BB1K&webforms_id=1523701"></script> 我希望JS代码呈现图像或文本,而不是生成订阅表单,我希望将输入的图像或文本放入文件存储(如A
<script type="text/javascript" src="https://app.getresponse.com/view_webform_v2.js?u=BB1K&webforms_id=1523701"></script>
我希望JS代码呈现图像或文本,而不是生成订阅表单,我希望将输入的图像或文本放入文件存储(如AWS)中,而不是放在我的应用程序中
我在Rails 4.2.5上运行
上面的JS代码正在生成表单,表单必须保存在文件存储(CMIIW)中的某个位置。我想做一个应用程序,可以生成这种JS代码
另外,我是Rails的新手,任何人都可以解释这个过程,或者是否有任何gem可以帮助完成这个任务。谢谢。为了生成JS文件并存储在S3中,您应该执行以下操作:
# app/services/js_generator.rb
class JsGenerator
def initialize(some, params, here)
@params = params
# ...
end
def generate_code
js = <<-END.squish
var yourJavaScriptCode = "here";
var embededExample = #{params};
# ... etc
END
end
def generate_and_save(tmp_file_name)
code = generate_code
tmp_file = "#{Rails.root}/tmp/#{tmp_file_name}.js"
File.open(tmp_file, 'w') do |f|
f.write code
end
tmp_file
end
end
#app/services/js_generator.rb
类JS生成器
def初始化(一些,参数,此处)
@params=params
# ...
结束
def生成代码
js=所以你想要的是一个
公开的
其基础是你需要一个公共JS文件来从你的应用程序中“拉”出数据,并在别人的网站上显示相应的HTML
该文件将包含在其他人的网站上;它将使用来自服务器的数据填充站点上的HTML元素(通过)。它可能会使用一个,但更多的时候只是用您自己服务器上的资产装饰一个HTML元素
你可以放在网站上的所有小部件/徽章/按钮都只是嵌入了其他人的JS。这些JS文件需要处理应用程序中的公共数据(即您不能使用任何服务器端技术)
--
JS
将JS文件公开的唯一方法是将其放置在public
文件夹中,或者至少是应用程序(子域)中可公开访问的部分
您不能使用该功能
当然,您可以使用etc等版本控制机制,但事实是,您需要一个公共“链接”,其他站点可以包括:
<script src="http://api.yoursite.com/public.js"></script>
--
数据
要在站点上填充数据,您需要使用可公开访问的API
:
#config/routes.rb
scope constraints: { subdomain: "api" } do
resources :images, module: :api #-> api.url.com/images/x
end
必须使用与应用程序类似的身份验证进行备份(我的API身份验证集成有点模糊):
科尔斯
最后,最后一项考虑是:
跨源资源共享(CORS)是一种机制,允许从源于资源的域之外的另一个域请求网页上的受限资源(例如字体&javascript)
换句话说,你不能让任何人从你的服务器上拉你的JS文件。除非您使用正确的CORS
策略授予他们权限,否则HTTP将不允许这样做
您需要做的是使您的public.js和API
可以被任何人访问。因此,建议将这两者都放在子域中。我可以给你更多的信息,如果需要的话
有什么宝石可以帮助完成这项任务吗
据我所知没有
这是一些高级功能。您必须知道HTTP web服务的底层身份验证模式,并将其与用于第三方的JS实现相匹配
以最简单的形式,您正在制作一个小应用程序(“widget”),用于提取API数据。你只需要知道你的应用程序的哪些部分允许访问,以使功能正常工作。你说的“我希望JS代码呈现图像或文本并保存到AWS”是什么意思?我更新了问题,抱歉我的英语不好。请让我知道,如果它仍然困惑你。你知道关于“贡”宝石。这可能对你有帮助。通过使用它,我们可以像文本视图一样显示生成的js代码。你需要这种东西吗?我说得对吗?兰兹特,这不会有帮助。那么我认为你需要一个JS脚本来帮助别人创建一个“表单”,并将表单保存起来供以后使用,对吗?比如,如果用户想要一个“红色”表单,他们可以将脚本放在他们的站点上&它会显示表单?这太棒了。我试试看。非常感谢你,里奇!
// site
<script "http://api.yoursite.com/public.js"></script>
<body>
<div id="your_widget" data-name="tester" data-attribute="value"></div>
</body>
// JS
#config/routes.rb
scope constraints: { subdomain: "api" } do
resources :images, module: :api #-> api.url.com/images/x
end
#app/models/user.rb
class User < ActiveRecord::Base
has_secure_token #-> native to Rails 5; gem for Rails 4
end
#app/controllers/api/images_controller.rb
class Api::ImagesController
before_filter :authenticate
def show
user = User.find_by token: request.headers["Auth_Key"]
image = user.images.find params[:id]
render json: image.to_json if image
end
private
def authenticate
if request.headers.include? "Auth_Key"
render :unprocessable_entity unless User.exists? token: request.headers["Auth_Key"]
end
end
end
var image_url = $.ajax({
url: "http://api.url.com/images/x",
headers: "Auth-Key": "x"
});