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

问题描述 投票:6回答:6

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

我想用动态内容创建网页...

如果我有一个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脚本生成的内容替换当前网页。

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

:BP:

html browser lua
6个回答
8
投票

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

  1. 在Web浏览器中
  2. 在Web服务器上

如果您希望它在浏览器中运行,那么您需要支持浏览器内置的语言(或由扩展程序提供)。出于所有实际目的,如果您正在为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土地上被认为是最佳的。


13
投票

在客户端,您可以使用:

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

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


0
投票

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

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

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

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

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

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

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

#!/usr/local/bin/lua

0
投票

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

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

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


-1
投票

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

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


-1
投票

Normally, this is not part of that easy...

JavaScript用于编写Web脚本。

Luckily, there is a solution

但是有一个JavaScript库“Starlight”,它实现了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>
© www.soinside.com 2019 - 2024. All rights reserved.