JavaScript - копирование URL при наведении мыши - PullRequest
0 голосов
/ 02 апреля 2020

Я нашел следующий скрипт в сети, и в основном он копирует URL-адрес ссылки, на которую наводит курсор мыши, в буфер обмена. Это работает хорошо, но как я могу настроить его так, чтобы он копировал URL-адрес в буфер обмена только при использовании комбинации CTRL + ALT + C ?

$(document).ready(function() {
  console.log('"URL Copy When Hover" ready');
  $("a").hover(function() {
    // var URL = $(this).attr("href");
    var URL = (this.href);
    GM_setClipboard(URL);
    console.log('"'+URL+'" copied to clipboard');
  });
});

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Это может быть то, что вы ищете,

  $(document).ready(function() {

  let URL;

  console.log('"URL Copy When Hover" ready');
    let key_listener = (e) => {
      if(e.key === "c" && e.altKey && e.ctrlKey) {
            GM_setClipboard(URL);
            console.log('"'+URL+'" copied to clipboard');
       }
    }


  $("a").mouseover(function() {

    URL = (this.href);

    window.addEventListener("keydown", key_listener);


  }).mouseleave(() => {
     window.removeEventListener("keydown", e => key_listener);
  });

});
0 голосов
/ 02 апреля 2020

Если я вас правильно понял, вы хотите что-то вроде этого:

let copyToClipboard = string => {
    let el = document.createElement('textarea');
    el.value = string;
    document.body.appendChild(el);
    el.select();
    document.execCommand('copy');
    document.body.removeChild(el);
};

document.querySelectorAll('a')
    .forEach(nodeElement => {
        nodeElement.addEventListener('mouseenter', ({target}) => {
            if (!target.href) return;

            copyToClipboard(target.href);
        }, false)
    })

С событием keydown:

document.body.addEventListener('keydown', event => {
            if (event.ctrlKey && event.altKey && event.key === 'C') {
                ...
            }
        }, false);

Другая версия (с методом copyToClipboard):

window.lastHoveredLink = '';

document.body.addEventListener('mousemove', ({target}) => {
    if (target.nodeName !== 'A') return;

    window.lastHoveredLink = target.href;
}, false);

document.addEventListener('keydown', event => {
    if (window.lastHoveredLink
        && event.ctrlKey 
        && event.altKey 
        && event.code === 'KeyC') {
        copyToClipboard(window.lastHoveredLink);
    }
}, false);
...