2016-12-09 6 views
3

Есть ли способ скопировать текст из div в буфер обмена, когда пользователь нажимает кнопку в вязах 0.18?elm: скопировать текст в буфер обмена

Я посмотрел Clipboard.elm, но я не могу заставить его скомпилировать и работать в вязах 0.18. Итак, есть ли официальный способ сделать это в вяже 0.18?

+0

Там очень мало библиотек, wrap js, потому что они не могут быть опубликованы. Таким образом, вы, вероятно, захотите использовать порт. В этом случае это будет довольно просто, так как вам нужно только одно сообщение (для js), и это самый простой бит –

ответ

3

Если целевой браузер поддерживает его, то вы можете сделать это через порты, например:

вяза:

type Msg = Copy 

update : Msg -> Model -> (Model, Cmd Msg) 
update msg model = 
    case Debug.log "msg" msg of 
    Copy -> (model, copy()) 

port copy :() -> Cmd msg 

-- VIEW 
view : Model -> Html Msg 
view model = 
    div [] 
    [ Html.input [ id "copy" ] [] 
    , Html.button [ onClick Copy ] [ text "copy" ] 
    ] 

JavaScript:

const app = Elm.Main.fullscreen(); 
app.ports.copy.subscribe(() => { 
    console.log('copy'); 
    document.querySelector('#copy').select(); 
    document.execCommand('copy'); 
}); 
+0

. Обратите внимание, что это решение не работает в Firefox 41+, которое строго описывает контекст, в котором вы можете выполнить скопировать команду. См. Https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand#Browser_compatibility для (немного) дополнительной информации. Кто-то, кто лучше понимает время выполнения Elm, вероятно, может объяснить, почему обратный вызов не вызывается в цикле событий ... –

Смежные вопросы