Имитация комбинации “Shift + Left Click"

259
25 декабря 2017, 14:49

Использую user.js. Нужно эмулировать сочетание Shift + Left Click на элементе с id. Пробовал window.open, но не подходит, т.к ссылки генерируются автоматически.

        function openClient() {
            window.open("динамические ссылки", "_blank", "toolbar=no, scrollbars=no, resizable=no, top=50, left=50, width=450, height=615");
        }

Отлично работает:

var start = document.getElementById("startBtn").click();

Можно ли как-то изменить, чтобы клик происходил с зажатой клавишей shift сразу при заходе на страницу, но без jQuery?

Answer 1

Можно создать объект события MouseEvent вручную, передав ему в конструктор кроме базовых параметров ещё и shiftKey: true:

document.getElementById("button").addEventListener("click", function() { 
  var event = new MouseEvent("click", { 
    bubbles: true, 
    cancelable: true, 
    view: window, 
    shiftKey: true 
  }); 
  document.getElementById("link").dispatchEvent(event); 
});
<a id="link" href="https://google.ru">Link</a> 
<input id="button" type="button" value="Click" />

Для наглядности примера событие генерируется по клику на кнопку. Но при загрузке страницы, если заменить document.getElementById("button").addEventListener("click" на document.addEventListener("DOMContentLoaded", оно тоже работает.

Проверено на работоспособность в Opera 49.0.2725.47

В IE 11.125.16299.0 new MouseEvent работать отказывается, но зато там работает deprecated метод initMouseEvent. Однако передачу true в качестве параметра shiftKey он благополучно игнорирует, открывая ссылку в том же окне:

document.getElementById("button").addEventListener("click", function() { 
  var event = document.createEvent("MouseEvent"); 
  event.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, true, false, 0, null); 
  document.getElementById("link").dispatchEvent(event); 
});
<a id="link" href="https://google.ru">Link</a> 
<input id="button" type="button" value="Click" />

А чтобы было не слишком скучно, поведение в Firefox 57.0.2 отличается и от Opera, и от IE: в нём работают как new MouseEvent, так и initMouseEvent, однако при передаче true в shiftKey в обоих случаях вообще ничего не происходит (без shiftKey работает).

READ ALSO
Не загружается страница в webbrowser c#

Не загружается страница в webbrowser c#

Добрый день! Почему не прогружается страница "nektome/chat" в webbrowser? Вылетают следующие ошибки и происходит анимация загрузки

238
Uncaught ReferenceError: $ is not defined

Uncaught ReferenceError: $ is not defined

Почему код выдает ошибку Uncaught ReferenceError: $ is not defined

272
datepicker выбор даты начиная с завтрашнего дня

datepicker выбор даты начиная с завтрашнего дня

Как в datepicker сделать чтобы выбирать дату можно только начиная с завтрашнего дня? То есть, нельзя выбрать сегодняшнюю и прошедшие даты

460