Keepress手势使用Tampermonkey for Chrome

时间:2018-01-20 02:51:40

标签: javascript

我正在制作一个tampermonkey用户脚本,用Pre-Quantum Firefox替换FireGestures中存在的一项功能。能够将所有悬停链接打开到新的背景选项卡中。所以有一个组合按键,在FG中是Ctrl +右键单击并绘制一个手势曲目,虽然您想要打开每个链接。到目前为止,我所拥有的一切都是由其他人为我写的,所以我不是想要获得荣誉,而是我在我的头脑中。我没有编辑和修复所需内容的专有技术。这是我到目前为止所做的。

(function(delay, t, lnk, clicked) {

  //config: delay before click. mouse movement will reset the delay timer.
  delay = 1000; //in milliseconds. 1sec = 1000ms

  t = 0;

  function mousemove() {
    clearTimeout(t);
    if (lnk) t = setTimeout(clickLink, delay);
  }

  function clickLink() {
    removeEventListener("mousemove", mousemove);
    clearTimeout(t);
    if (lnk) {
      lnk.target = "_blank";
        lnk.click();
        lnk.target = "";
      clicked = true;
    }
  }

  addEventListener("mouseover", function(ev, el, el2) {
    el = ev.target;
    removeEventListener("mousemove", mousemove);
    clearTimeout(t);
    while (el) {
      if (el.tagName === "A") {
        el2 = el;
        if (el !== lnk) {
          lnk = el;
          clicked = false;
          addEventListener("mousemove", mousemove);
          clearTimeout(t);
          t = setTimeout(clickLink, delay);
        }
        return;
      }

      el = el.parentNode;
    }
    if (!el2) {
      lnk = null;
      clicked = false;
      removeEventListener("mousemove", mousemove);
      clearTimeout(t);
    }
  });

})();

我面临一些问题。 1.这不需要任何按钮组合。它会持续处于活动状态,并会单击任何悬停指定时间长度的链接。我希望它仅在按下按钮组合时起作用,理想情况下是Ctrl +右键单击。我找到了一个处理组合按键的线程,但不知道如何编辑它并将其插入现有脚本以满足我的需要。

document.addEventListener ("keydown", function (zEvent) {
    if (zEvent.ctrlKey  &&  zEvent.altKey  &&  zEvent.code === "KeyE") {
        // DO YOUR STUFF HERE
    }
} );

2。 chrome中的弹出窗口阻止程序实际上会阻止这些选项卡打开。除了关闭弹出窗口拦截器之外,我不知道是否有任何方法可以解决这个问题,但如果有的话我会很感激帮助 3.此脚本在前台而不是后台打开选项卡。因此,在页面上打开一堆链接是不可能的,因为只要单击第一个链接,它就会导航到新选项卡。我解决这个问题的最初想法是让脚本只是在它传递的每个链接上做一个中键鼠标事件,但我甚至不知道这是否是可能或实际的。 我知道我要求很多,但我只是希望有人知道他们在做什么可以通过编辑我已经拥有的东西或者自己写出来帮助我。我感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

这是我的旋转。当你拿着钥匙时,这是切换而不是继续。

您可以将以下内容添加到TamperMonkey脚本中,当您按“Ctrl + Alt + S”时,页面上的链接将被修改并附加onmouseover个事件。当您再次点击组合键时,该事件将从链接中删除。简短而简单。

document.addEventListener('keydown', function (zEvent) {
  if (zEvent.ctrlKey && zEvent.altKey && zEvent.code === 'KeyS') {
    var links = document.getElementsByTagName('a');
    console.log(links.length);//how many links have been grabbed
    for (var i = 0; i < links.length; i++) {
      if (links[i].onmouseover !== null && links[i].onmouseover.toString().indexOf('function openit') > -1)
      {
        //toggling the funcitonality off
        //remove it
        links[i].setAttribute('target', '');
        links[i].setAttribute('onmouseover', '');
      } 
      else
      {
        //toggling the funcitonality on
        //add it
        links[i].setAttribute('target', 'blank');
        links[i].setAttribute('onmouseover', 'function openit(elem){console.log(\'userScript will click on the link\');elem.click();};openit(this);');
      }
    }
  }
}
);

至于弹出式阻止...我不知道。