在浏览器中嵌入一个ruby解释器
embedding a ruby interpreter in browser
我有一个rails应用程序,我试图让用户交互式地编写ruby代码,类似于rubymonk。计划是有一个文本区,他们可以写ruby代码,有一个按钮,将执行他们所写的一切。我怎么也想不出怎么做这件事。
首先我在看RubyJS,但这似乎只是允许你在javascript中定义ruby对象。它仍然需要你编写JS。Opal是另一种想法,但这似乎只是服务器端。一种选择是将ruby代码字符串发送到服务器并使用eval
执行它,但这似乎是一个安全噩梦。
这就引出了我最后一个问题。是否有任何JS库将采用ruby(作为字符串)编写的代码块,并将其编译成JS并执行?或者如果我忽略了什么,有没有更简单的解决方案?
这个问题已经问了一段时间了,但是如果人们仍然感兴趣…
蛋白石是另一个想法,但这似乎只是服务器端。一种选择是将ruby代码字符串发送到服务器,并使用eval执行它,但这似乎是一个安全噩梦。
您可以在客户端运行Opal !
添加opal到您的站点,然后使用Opal.compile()
和Opal.eval()
运行ruby脚本。他们所做的基本上是通过opal解析器运行opal解析器,从而生成解析器的JS版本。通过从站点下载opal-parser.min.js,您可以找到包含解析器的opal预编译版本。这将使您能够访问.compile()
和.eval()
函数。
这是我能想到的最简单完整的在线ruby编译器。请注意,puts
打印到控制台,因此,如果您希望看到任何输出,请确保在最后一条语句中有返回非nil值的东西。
index . html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Compile ruby from your browser</title>
</head>
<body>
<h1>Input</h1>
<textarea id="input" rows="5" cols="50">
puts "Hello, World!"
3 * 5
puts "blurb"
4**6
</textarea>
<button id="compile" onclick="compile()">Compile!</button>
<h1>Transpiled</h1>
<textarea id="transpiled" rows="5" cols="50"></textarea>
<h1>Output</h1>
<textarea id="output" rows="5" cols="50"></textarea>
<script src="js/opal.min.js"></script>
<script src="js/opal-parser.min.js"></script>
<script type="text/javascript">Opal.load('opal-parser')</script>
<script src="js/scripts.js"></script>
</body>
</html>
script.js
function compile() {
const input = document.getElementById("input");
const transpiled = document.getElementById("transpiled");
const output = document.getElementById("output");
transpiled.value = Opal.compile(input.value);
output.value = eval(transpiled.value);
}
document.onload = function() { compile(); }
如果希望代码在客户端执行,可以使用emscripten。这就是我的回答。确实如此。
如果你想让代码在服务器端执行,如果你不想处理安全问题,你可以使用Ideone API。
注意:Stack Overflow不允许我发布到Ideone API的链接,所以这里是URL: http colon slash slash ideone.com slash api
- Rails:试图在javascript(Google Charts API)中嵌入一个adv-ruby(each+迭代器
- javascript中的Ruby插值在两个实例中的一个实例中不起作用
- 用Ruby抓取一个Javascript很重的网站
- 我可以在javascript/html/css中制作一个Ruby GUI吗?
- 在 JavaScript 中获取一个 Ruby 变量
- 将javascript中的一个变量传递给ruby控制器
- 什么是编译器?如何制作一个简单的ruby到javascript编译器
- Ruby——你能像javascript一样创建一个独立的对象吗?
- 拥有一个简单的浏览器内JS游戏,需要它与后端'Ruby脚本一起工作
- 链接collection_select菜单选项到一个过滤器方法——Ruby on Rails
- Javascript有一个类似Ruby的BasicObject吗
- Ruby和Javascript:传递一个Ruby数组作为Javascript变量
- 在Ruby on Rails中设置一个Javascript会话
- 在浏览器中嵌入一个ruby解释器
- 我如何设置一个会话变量从js在haml在ruby on rails
- 如何传递一个javascript全局变量到requirejs, ruby on rails
- 奥丁项目的JS到Ruby的最后一个翻译
- Ruby On Rails -我需要一个javascript文件通过Ruby时使用require.js
- 如何为Ruby on Rails 3制作一个全局JavaScript文件,该文件从Rails中获得一些内容<%= ..%
- 如何使用CryptoJS AES解密消息.我有一个Ruby的例子