如何从HTML5脚本/文件/页面调用Lua脚本

时间:2011-06-06 20:26:46

标签: html browser lua

非常基本的问题(我认为),但我是这个网络/脚本世界的新手。

我想创建包含动态内容的网页...

如果我有一个HTML页面(HTML5)并想从中调用lua脚本,我该怎么做:

a)调用它? <script type=text/application><script type=text/lua>? 等等?这一定是基本的,我找不到答案。

b)从中检索数据?或者我可以吗?我可以这样做:     int xx = 0;     <script type=text/lua>        xx = 123;     </script> 当脚本退出时,是否希望xx为123?

c)将当前网页替换为lua脚本生成的内容。

很抱歉有这些补救问题,但非常感谢所有帮助。

:沸点:

6 个答案:

答案 0 :(得分:13)

在客户端,您可以使用:

Fengari和Moonshine执行编译的Lua字节码。它们比lua.js更兼容,并且具有比例如更低的代码大小。一个Emscripten编译的Lua解释器。它们可能是最慢的方法,因为它们没有像使用Emscripten编译的Lua解释器那样使用WASM / asm.js,并且它们不会生成随后可能被JIT控制的JavaScript。

我首先尝试使用 Fengari ,因为它似乎最活跃。它比使用WASM的东西更容易JS互操作。

答案 1 :(得分:8)

在WWW上,脚本可以在两个地方运行。

  1. 在网络浏览器中
  2. 在网络服务器上
  3. 如果您希望它在浏览器中运行,那么您需要支持浏览器内置的语言(或由扩展程序提供)。出于所有实际目的,如果您正在为WWW编写网页,那么您可以在HTML <script>中使用的唯一语言是JavaScript。

    如果要在Web服务器上运行它,则需要让HTTPD运行脚本以响应从其请求的URL。实现这一目标的最简单方法是通过CGI。

    使用CGI,HTTPD将运行一个程序(作为一个单独的进程)以响应正在进行的请求。它将通过STDIN和环境变量传递有关请求的各种信息(如the CGI specification中所述)。该脚本然后打印HTTP响应(标题(至少是内容类型)和正文(例如HTML文档))并将其发送到STDOUT,HTTPD将其拾取并将其发送回浏览器。

    如何配置服务器以使用CGI运行程序取决于服务器。 Apache has a guide用于他们的服务器。

    Lua可能有CGI库,但我不懂语言所以不能提出任何建议。

    CGI是一种缓慢且低效的协议(因为它需要为每个请求生成新的进程)。还有其他选择,例如FastCGI和各种语言特定选项。再说一次,我不知道在Lua土地上被认为是最佳的。

答案 2 :(得分:0)

我玩过的大部分CGI和Lua都涉及生成网页和插入动态位,而不是从网页调用脚本。所以更像是原始问题中的选项C.您希望拥有的任何HTML 4或5元素都可以轻松添加到生成的网页中。

以下是一些您可以查看更多详细信息的地方:

CGILua有一些关于如何一起使用CGI和Lua的好信息。

This long forum page在代码和输出方面有一些很好的例子。

Beginning Lua Programming 一书有一整章介绍如何设置和使用CGI和Lua。 (第15章 - 网络编程)

(虽然其中一些地方有点陈旧,但他们仍然很好地展示了如何做这类事情。)

请记住:如果您在服务器端使用cgi或fastcgi,则需要Lua文件的第一行指向Lua解释器所在的位置,例如:

#!/usr/local/bin/lua

答案 3 :(得分:0)

如果您想在浏览器中运行Lua,请考虑使用Lua Alchemy - 用于Flash VM的Lua解释器。

还有一些Lua的JavaScript实现,但是上次我看起来还不够成熟。

如果您想在服务器上运行Lua,请参阅以下答案:What web server to use for Lua web development

答案 4 :(得分:-1)

如果您想从浏览器运行脚本,请考虑使用javascript。

它与Lua非常相似,与Lua不同,它被大多数浏览器解释。

答案 5 :(得分:-1)

通常情况下,这不是那么容易的一部分......

JavaScript用于编写网络脚本。

幸运的是,有一个解决方案

但是有一个JavaScript库&#34; Starlight&#34;,它实现了Lua,以下是你的工作方式:

<!DOCTYPE html>
<html>
<body>
<!WARNING! These will only work if you load the starlight library later>
  <script type="application/lua">
    print('Hello world')
  </script>
<!Here we load the library for Lua>
<script src="//cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script>
<script src="http://paulcuth.me.uk/starlight/browser-lib/starlight.js" data-run-script-tags></script>
</body>
</html>