Ответ 1
В спецификации DOM Level 3 реализовано свойство isTrusted
для объектов событий. Это свойство имеет значение true
, когда событие генерируется в результате действия пользователя, и false
, когда оно было создано, например. через createEvent
:
События, которые генерируются пользовательским агентом либо в результате взаимодействия с пользователем, либо как прямой результат изменений в DOM, доверяются пользовательским агентом с привилегиями, которые не предоставляются событиям, генерируемым script через метод
DocumentEvent.createEvent("Event")
, модифицированный с помощью методаEvent.initEvent()
или отправленный методомEventTarget.dispatchEvent()
.
В настоящее время, похоже, IE9 + и Firefox поддерживают это свойство. Здесь рабочий пример (очевидно, вам придется запускать его в одном из поддерживаемых браузеров):
var elem = document.getElementById("example");
elem.addEventListener("click", function (e) {
alert(e.isTrusted);
}, false);
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent(evt);
Это будет предупреждать false
, когда симулированное событие будет запущено сразу, и true
в любое время, когда вы на самом деле нажмете на элемент.