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:;-)