[英]Haskell Webviewhs getElementById from a webpage
對我來說,對於 Haskell 來說,GUI 仍然是最有潛力的,但是在示例中缺少一些基本信息,作為一個菜鳥 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
}
這將創建一個窗口,我可以在其中加載自定義網頁。 假設這個網頁有一個<input type="text" id="mytext">
並且旁邊有一個按鈕。 不重要,重要的是<button type="submit" id="sendtohaskell">
。 我將如何通過按下按鈕將文本字段中的信息獲取到 Haskell? 教程中沒有這樣的例子。 對我來說,這是從 webapp 獲取信息、在 Haskell 中處理並將其返回到例如的缺失鏈接。 SQLite。
如github頁面所示,您可以通過回調從JS接收數據,並在Haskell的窗口中執行任意JS。 這足以進行您可能想要的任何類型的通信,這里有一個示例,它在按下按鈕時執行一些 Haskell,然后在網頁中顯示結果:
{-# LANGUAGE OverloadedStrings, QuasiQuotes #-}
module Main where
import System.Directory(getCurrentDirectory)
import Text.Printf
import Control.Monad(void)
import Language.Javascript.JMacro
import qualified Graphics.UI.Webviewhs as WHS
import qualified Data.Text as T
windowCallback window = do
return True
handleJSRequest window request = void . WHS.runJavaScript window $ [jmacro|
show_response `(printf "'Got response: %s'" request :: String)`
|]
main :: IO ()
main = void $ do
dir <- getCurrentDirectory
WHS.withWindowLoop
WHS.WindowParams
{ WHS.windowParamsTitle = "Test"
, WHS.windowParamsUri = T.pack $ printf "file://%s/example.html" dir
, WHS.windowParamsWidth = 800
, WHS.windowParamsHeight = 600
, WHS.windowParamsResizable = True
, WHS.windowParamsDebuggable = True
}
handleJSRequest
windowCallback
<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>
不過你應該注意到,haskell webview 庫只有 2 次提交,最后一次是在 7 個月多前,所以目前還沒有積極開發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.