Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Haskell Webviewhs文本字段并返回Haskell_Javascript_Haskell_Webview - Fatal编程技术网

Javascript Haskell Webviewhs文本字段并返回Haskell

Javascript Haskell Webviewhs文本字段并返回Haskell,javascript,haskell,webview,Javascript,Haskell,Webview,我发现了webviewhs,最近尝试过。它只是工作,我认为它可以做我需要它做的事情。样品很多,但我需要一些哈斯克尔专家的指点 {-# LANGUAGE OverloadedStrings , QuasiQuotes #-} import Data.Text import Language.Javascript.JMacro import qualified Graphics.UI.Webviewhs as WHS main :: IO () main = WHS.withWi

我发现了
webviewhs
,最近尝试过。它只是工作,我认为它可以做我需要它做的事情。样品很多,但我需要一些哈斯克尔专家的指点

{-# LANGUAGE
    OverloadedStrings
  , QuasiQuotes
#-}

import Data.Text
import Language.Javascript.JMacro
import qualified Graphics.UI.Webviewhs as WHS

main :: IO ()
main =
  WHS.withWindowLoop
    WHS.WindowParams
      { WHS.windowParamsTitle      = "webviewhs - How do I run some JavaScript inside the window?"
        -- This could be a localhost URL to your single-page application (SPA).
      , WHS.windowParamsUri        = ""
      , WHS.windowParamsWidth      = 800
      , WHS.windowParamsHeight     = 600
      , WHS.windowParamsResizable  = True
      , WHS.windowParamsDebuggable = True
      }
    -- This is the callback JavaScript can execute.
    (\ _window stringFromJavaScript -> print stringFromJavaScript) $
    -- This function runs every window loop.
    -- Return True to continue the loop or False to exit the loop.
    \ window -> do
      let string = "Hello from Haskell." :: Text
      -- runJavaScript returns either True on success or False on failure.
      WHS.runJavaScript
        window
        [jmacro|
          alert ("Yahoo! Alert windows, but little too persistent!");
          window.external.invoke("Hello from JavaScript.");
        |]

如果我使用上面的代码,警报对话框(测试)会不断弹出。我很想在
ok
之后把它处理掉。我还多次尝试从站点的
输入
字段获取信息(
document.getElementById
)。不能让它工作。对我来说,
webviewhs
是Haskell中缺少的链接,我真的很想让它工作。

问题在于
WHS.withWindowLoop
。指:

为您创建一个窗口。接受在窗口循环的每次迭代中调用的函数。如果接受的函数返回
False
,则退出循环并销毁窗口如果接受的函数返回
True
,循环将继续

(我的重点)

请注意,
withWindowLoop
的最后一个参数被反复调用,直到它返回
False
。但是,您总是返回
True
,这意味着对话框会重复打开,而不会完成循环。我可以看到解决这个问题的两种方法:

  • 改用
    WHC.createWindow
    ;此函数只创建一个窗口并返回它,不进行循环。这就是所使用的方法
  • 继续在WindowLoop中使用
    ,但返回
    False
    ,而不是
    True
    。这将在一次迭代后立即停止循环
  • 如果您确实想在WindowLoop
中使用
,那么您可以先声明一个
IORef
,它是
True
,然后在一次迭代后更改为
False
。不过,这种方法并不十分惯用。(不要使用这种方法,它不起作用,它实际上会启动对话框两次,而且比需要的复杂得多)
谢谢。这很有效。剩下的问题是使用
getElementById
从文本字段获取信息。这将有助于我进一步了解
webviewhs
@Madderote你是在问这个问题,还是只是在评论你还有什么要学?如果你在问一个问题,最好是作为一个全新的问题来问,而不是作为评论来写。现在读它似乎是一个新问题。将重新发布。谢谢@Madderote!看起来你的问题还没有提出来,但我肯定会在提出来的时候再看。@bradm:;-)