非常基本的问题(我认为),但我是这个网络/脚本世界的新手。
我想用动态内容创建网页...
如果我有一个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:
在WWW脚本上可以运行两个地方。
如果您希望它在浏览器中运行,那么您需要支持浏览器内置的语言(或由扩展程序提供)。出于所有实际目的,如果您正在为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土地上被认为是最佳的。
在客户端,您可以使用:
Fengari和Moonshine执行编译的Lua字节码。它们比lua.js更兼容,并且具有比例如更低的代码大小。一个Emscripten编译的Lua解释器。它们可能是最慢的方法,因为它们没有像使用Emscripten编译的Lua解释器那样使用WASM / asm.js,并且它们不会生成随后可能被JIT编写的JavaScript。
我首先尝试使用Fengari,因为它似乎最活跃。它比使用WASM的东西更容易JS互操作。
我玩过的大部分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
如果你想在浏览器中运行Lua,可以考虑使用Lua Alchemy - 用于Flash VM的Lua解释器。
还有一些Lua的JavaScript实现,但是上次我看起来还不够成熟。
如果你想在服务器上运行Lua,请参考以下答案:What web server to use for Lua web development
如果要从浏览器运行脚本,请考虑使用javascript。
它与Lua非常相似,与Lua不同,它被大多数浏览器解释。
JavaScript用于编写Web脚本。
但是有一个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>