Elm, использующий Html .attribute с «onmouseover», не работает - PullRequest
2 голосов
/ 21 марта 2020

Я хотел бы добавить onmouseover , чтобы изменить цвет фона кнопки. Мне не нужно использовать Html .Events.onMouseOver , поскольку это очень простая задача. Я не хочу использовать другие внешние библиотеки.

Я создаю Html .attribute с

div
[
   -- Html.Event.onMouserOver NoUse
   Html.attribute "onmouseover"  "$(this).css('background','green');"
]
[ ... ]

Когда я добавляю неизвестные атрибуты в Elm. Elm добавляет префикс «data-» к атрибутам. Поэтому, когда я компилирую код, он будет переведен в Html

<div data-onmouseover="$(this).css('background','green');">...</div>

Так что «onmouseover» не работает!

Как могу ли я взломать событие "наведения мыши" в Вязах? и почему Элму нужно блокировать такое событие?

1 Ответ

7 голосов
/ 21 марта 2020

Elm делает это намеренно, чтобы избежать атак внедрения скриптов (например: если вы берете строку у пользователя и задаете ее здесь как значение, они не могут написать какую-нибудь вредоносную JS и ваша страница выполнит ее).

Правильное решение для этого - использовать Html.Events.onMouseOver и код Elm (включая, если вам действительно нужно произвольные JS, порты). Вы говорите, что вам не нужно использовать это, но вы делаете в Elm.

Даже если вы могли бы делать то, что хотели, на самом деле это не сработало бы так, как вы хотите: Elm контролирует DOM для страницы и может уничтожать и воссоздавать элементы, то есть изменения, которые вы make in JS может быть потерян произвольно.

...