Javascript 从网页获取Haskell Webviewhs getElementById

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

对于我来说,GUI仍然是Haskell的最大潜力,但在示例中缺少一些基本信息,比如noob Haskeller。假设其中一个例子:

{-
  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>