在我正在构建的网络应用程序中,我需要在应用程序内(在浏览器中)执行不受信任的用户代码。不受信任的代码从 Javascript 中获得一个字符串,并且应该执行其操作并生成一个新字符串。所以我想确保它不能执行任何 IO,例如修改 DOM、发出 HTTP 请求或访问本地缓存。需要明确的是,一个用户会上传一些不受信任的代码,这些代码将在其他用户的浏览器中执行。
\n\n我显然不想使用 eval 运行一些 Javascript,因为那可以做任何事情。我的想法是,用户可以上传一些使用 Emscripten 和 C 或 Rust 等创建的 WebAssembly。Javascript 将初始化一个包含输入字符串的内存缓冲区,WebAssembly 将读取它,然后将其输出写回缓冲区,然后可以在 JS 中使用。
\n\nWebAssembly 规范是这样说的:
\n\n\n\n\nWebAssembly 不提供对执行代码的计算环境的环境访问。与环境的任何交互,例如 I/O、对资源的访问或操作系统调用,只能通过调用嵌入器提供并导入到 WebAssembly 模块中的函数来执行。嵌入器可以通过控制或限制可导入的功能来建立适合各自环境的安全策略。这些考虑因素是 embedder\xe2\x80\x99s 的责任,也是特定环境的 API\n 定义的主题。
\n
我的理解是,WebAssembly 保证只有当我在初始化模块时显式传入它们时,它才能做危险的事情,这当然是我不会做的。
\n\n所以我的问题是:有没有什么方法可以让人们制作一些 WASM 代码来在这种情况下执行一些 IO 操作?或者还有什么其他不愉快的事情吗?
\n在Emacs组织模式中,是否可以让时钟报告表显示每个标签花费了多少时间?该手册似乎这么认为,但我不能使它发挥作用.这是我尝试过的:
#+BEGIN: clocktable :maxlevel 2 :scope file :tags nicetag
#+END:
* Header one :nicetag:
:LOGBOOK:
CLOCK: [2016-07-23 Sat 18:24]--[2016-07-23 Sat 19:38] => 1:14
CLOCK: [2016-07-23 Sat 12:23]--[2016-07-23 Sat 13:43] => 1:20
:END:
* Another header :bigtag:
:LOGBOOK:
CLOCK: [2016-07-23 Sat 20:24]--[2016-07-23 Sat 20:34] => 0:10
:END:
* A task :nicetag:
:LOGBOOK:
CLOCK: [2016-07-23 Sat 10:26]--[2016-07-23 Sat 11:26] => 1:00
:END:
Run Code Online (Sandbox Code Playgroud)
我想要的是表格显示所有带标签的标题:nicetag:,但表格没有显示任何内容.更好的方法是让表格显示文件中每个标签所花费的时间.
我在Haskell中有一个响应Json输入的服务器.问题是,有些情况下服务器会因部分功能而崩溃,但Liquid Haskell表示这是安全的.
这是一个最小的工作示例:
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}
module Main where
import qualified Web.Scotty as Scot
import GHC.Generics (Generic)
import qualified Data.Aeson as Json
import Data.Text.Internal.Lazy (Text)
main :: IO ()
main =
Scot.scotty 3000 $
Scot.get "/:queryJson" $ do
rawRequest <- Scot.param "queryJson"
case Json.decode rawRequest of
Nothing -> Scot.text "Could not decode input."
Just input -> Scot.text $ makeOutput (dim1 input)
{-@ type Dim = { x : Int | x >= 0 && x …Run Code Online (Sandbox Code Playgroud) 在 contenteditable div 中输入内容时,如何使光标保持在正确的位置?
我正在使用 Elm 创建一个文本框,并且我需要在每次输入时处理框中的文本。使用 contenteditable div 而不是 textarea 的原因是我需要能够识别某些单词并在您键入时将它们变成可点击的链接。
问题是,当文本更新时,光标会返回到文本的开头,因此所有内容都是从后到前输入的。
这是一个演示该问题的最小示例:
module Main exposing (..)
import Html
import Html.Events as Hev
import Html.Attributes as Hat
import Json.Decode as Json
main : Program Never Model Msg
main =
Html.beginnerProgram
{ model = ""
, update = update
, view = view
}
type Msg = NewText String
type alias Model = String
view : Model -> Html.Html Msg
view model =
Html.div
[ Hat.contenteditable True
, Hev.on "input" …Run Code Online (Sandbox Code Playgroud) 我正在Elm中构建我的第一个Web应用程序,我遇到这个问题,当我向本地服务器发出get请求时,Elm表示它是'NetworkError',即使浏览器控制台说它有效.
我做了一个最小的例子如下:
服务器由Haskell和Scotty制作:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Web.Scotty
import Data.Text.Lazy (pack)
main :: IO ()
main = scotty 3000 $ get "/" $ text $ pack "a"
Run Code Online (Sandbox Code Playgroud)
当你向localhost:3000发出get请求时,它所做的就是回复字母'a'.Elm应用程序只显示响应(如果有)和错误(如果有)和按钮来执行get请求:
import Http exposing (getString, send, Error)
import Html exposing (Html, text, br, button, body, program)
import Html.Events exposing (onClick)
type Msg
= DataRequest (Result Error String)
| Refresh
type alias Model =
{ response : String
, err : String
}
main : Program Never Model …Run Code Online (Sandbox Code Playgroud) 单击按钮时如何消除按钮周围的蓝色阴影?
我正在使用 Elm 和mdgriffith/elmui构建一个网络应用程序。
点击前按钮图片:
点击后:
榆木代码:
module Main exposing (main)
import Browser
import Element as E
import Element.Input as Ei
import Element.Border as Eb
main = E.layout [ E.padding 30 ] <|
Ei.button []
{ onPress = Nothing
, label = E.text "A button"
}
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我不想使用任何 CSS。
编辑:
我不认为这是重复的,因为我的问题是关于如何使用 elm-ui 而不是 CSS 来做到这一点。
elm ×3
haskell ×2
elm-ui ×1
emacs ×1
html ×1
http ×1
javascript ×1
org-mode ×1
scotty ×1
webassembly ×1