Javascript 从网页获取Haskell Webviewhs getElementById
对于我来说,GUI仍然是Haskell的最大潜力,但在示例中缺少一些基本信息,比如noob Haskeller。假设其中一个例子:Javascript 从网页获取Haskell Webviewhs getElementById,javascript,sqlite,haskell,Javascript,Sqlite,Haskell,对于我来说,GUI仍然是Haskell的最大潜力,但在示例中缺少一些基本信息,比如noob Haskeller。假设其中一个例子: {- webviewhs (C) 2018 David Lettier lettier.com -} {-# LANGUAGE OverloadedStrings #-} import qualified Graphics.UI.Webviewhs as WHS main :: IO () main = WHS.createWindow
{-
webviewhs
(C) 2018 David Lettier
lettier.com
-}
{-# LANGUAGE
OverloadedStrings
#-}
import qualified Graphics.UI.Webviewhs as WHS
main :: IO ()
main =
WHS.createWindowAndBlock
WHS.WindowParams
{ WHS.windowParamsTitle = "webviewhs - How do I create a window and have it run itself?"
-- This could be a localhost URL to your single-page application (SPA).
, WHS.windowParamsUri = "https://lettier.github.com"
, WHS.windowParamsWidth = 800
, WHS.windowParamsHeight = 600
, WHS.windowParamsResizable = True
, WHS.windowParamsDebuggable = True
}
这将创建一个窗口,我可以在其中加载自定义网页。假设此网页有一个
,并且旁边有一个按钮。这并不重要,重要的是
。我如何通过按下按钮将文本字段中的信息发送给Haskell?本教程中没有类似的示例。对我来说,这是从Web应用程序获取信息、在Haskell中处理并返回到例如SQLite的缺失链接。如图所示,您可以通过回调从JS接收数据,并从Haskell在窗口中执行任意JS。这就足以进行您可能需要的任何类型的通信,下面是一个示例,它在按下按钮时执行一些Haskell,然后在网页中显示结果:
{-#语言重载字符串,准语言#-}
模块主要在哪里
导入系统目录(getCurrentDirectory)
导入文本.Printf
进口管制.单子(无效)
import Language.Javascript.JMacro
将合格的Graphics.UI.Webviewhs导入为WHS
导入符合条件的数据。文本为T
windowCallback window=do
返回真值
handleJSRequest窗口请求=无效。WHS.runJavaScript窗口$[jmacro|
显示响应“”(printf“'get response:%s'”请求::字符串)`
|]
main::IO()
main=void$do
dir教程中没有缺少它。如何在Haskell和JavaScript之间进行通信,将在下面的一段中详细介绍,在您引用的代码之后,您还应该看看示例:@Cubic no its not。这既不会创建窗口,也不会返回任何内容。很抱歉,我在这里看不到。我想我的问题很清楚,但很遗憾,具体的例子不可用。@Michael Litchard:如果我不尝试并尝试所有的例子,我就不会发布这个问题。这是一个非常具体的问题,除了github上的示例之外,其他文档都非常有限,根本不存在。@Madderote事实上,Thank Cubic上有很多文档。回答得正是我需要知道的。现在我可以安心地再次集中精力学习哈斯克尔了。顺便说一句:谢谢你对发展的评论。但我不得不说,当谈到Haskell GUIs时,我实际上最喜欢这个。
<html>
<head>
<title>Example</title>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
function show_response(response) {
document.getElementById('response').innerHTML = response;
}
function submit() {
var value = document.getElementById('textbox').value;
window.external.invoke(value)
}
</script>
<input type="text" id="textbox"/>
<input value="say hello" type="button" onclick="submit()"/>
<p id="response"></p>
</body>
</html>