gpt4 book ai didi

javascript - Haskell Webviewhs 文本字段并返回到 Haskell

转载 作者:行者123 更新时间:2023-12-02 23:48:44 24 4
gpt4 key购买 nike

我最近发现了 webviewhs 并尝试了它。它确实有效,我认为它可以完成我需要它做的事情。示例很丰富,但我需要 Haskell 专家的一些指导。

{-# 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之后让它消失。我还多次尝试从站点的 input 字段获取信息 (document.getElementById)。无法让它发挥作用。对我来说,webviewhs 是 Haskell 中缺少的链接,我真的很想让它发挥作用。

最佳答案

问题出在 WHS.withWindowLoop 中。引用the documentation :

Creates a window for you. Accepts a function that is called with each iteration of the window loop. If the accepted function returns False, the loop is exited and the window is destroyed. If the accepted function returns True, the loop is continued provided it can.

(我的重点)

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

  • 改用WHC.createWindow;这个函数只是创建一个窗口并返回它,而不循环。这是使用的方法in the relevant example .
  • 继续使用withWindowLoop,但返回False而不是True。这将在一次迭代后立即停止循环。
  • 如果你确实想使用withWindowLoop,那么你可以先声明一个IORef,它是True,然后改为一次迭代后False。不过,这种方法不太惯用。(不要使用这种方法,它不起作用,它实际上会启动对话框两次,而且无论如何都比需要的复杂得多)

关于javascript - Haskell Webviewhs 文本字段并返回到 Haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com