elm / virtual-dom

The foundation of HTML and SVG in Elm.
https://package.elm-lang.org/packages/elm/virtual-dom/latest
BSD 3-Clause "New" or "Revised" License
209 stars 80 forks source link

`javascript:` ban disallows legitimate use for bookmarklets #165

Open Janiczek opened 4 years ago

Janiczek commented 4 years ago

See https://github.com/Janiczek/ellies/issues/3

I want to create a bookmarklet, which means an <a href="javascript:...">link</a> that I can drag to my bookmarks tab and there click on it to perform some JS on any page I'm on.

Elm's VDOM disallows this so the best I could do is to link to a file on GitHub that contains the bookmark source code.

jackwilsdon commented 4 years ago

It's still possible to have a javascript: link using Html.Attributes.property, although this seems like more of a workaround than a solution:

module Main exposing (main)

import Html exposing (Html, a, text)
import Html.Attributes exposing (property)
import Json.Encode as E

main : Html msg
main =
    a [ property "href" (E.string "javascript:alert(\"This works!\")") ] [ text "Click me" ]

Ellie link

Janiczek commented 2 years ago

Note this workaround doesn't work with --optimize builds.

laurentpayot commented 2 years ago

Note this workaround doesn't work with --optimize builds.

Unfortunately this is true and makes this nice workaround useless :disappointed:

Janiczek commented 2 years ago

virtual-dom has recently been fixed; this now doesn't work in non-optimized builds either.

Here is a way to have bookmarklets in Elm via WebComponents: https://ellie-app.com/hwbBHmqLQ8Ra1