javascript - 有没有办法用javascript模拟鼠标点击时按下多个键?

标签 javascript jquery html google-chrome google-chrome-extension

我正在开发 Chrome 扩展,让 Netflix 视频播放器打开隐藏的质量变化面板。

Netflix 根据您的互联网速度自动更改视频质量。

但是有一种已知的方法可以打开隐藏面板并手动更改质量。

这是在 HTML5 Player Only 中打开隐藏面板的方法 CTRL + SHIFT + ALT + S

有没有办法当用户点击标题时,
它模拟键盘键 CTRL + SHIFT + ALT + S ?

$('body').on('click', 'div.player-status .player-status-main-title', function () {
    alert('Clicked!');
    //Simulate?
});

最佳答案

试试这个(无法测试,因为我无法访问 Netflix 已测试,确认从 2014 年 11 月 11 日开始工作)。

function simulateCtrlShiftAltS() {
  // Prepare function for injection into page
  function injected() {
    // Adjust as needed; some events are only processed at certain elements
    var element = document.body;

    function keyEvent(el, ev) {
      var eventObj = document.createEvent("Events");
      eventObj.initEvent(ev, true, true);

      // Edit this to fit
      eventObj.keyCode = 83;
      eventObj.which = 83;
      eventObj.ctrlKey = true;
      eventObj.shiftKey = true;
      eventObj.altKey = true;

      el.dispatchEvent(eventObj);
    }

    // Trigger all 3 just in case
    keyEvent(element, "keydown");
    keyEvent(element, "keypress");
    keyEvent(element, "keyup");
  }

  // Inject the script
  var script = document.createElement('script');
  script.textContent = "(" + injected.toString() + ")();";
  (document.head||document.documentElement).appendChild(script);
  script.parentNode.removeChild(script);
}

此代码改编自对您链接的答案的评论:https://stackoverflow.com/a/10520017/2518069

准确地说,来自这个例子:http://jsbin.com/awenaq/4

关于“按需调整”:

有些页面会处理元素上的事件,有些会等到它冒泡到 bodydocument 之类的内容。您可以通过转到 Dev Tools、Sources 并启用 Event Listener Breakpoints > Keyboard 来监视它。从那里,您将能够看到哪个事件触发了您需要的更改,以及哪个元素捕获了它 - 当断点触发时它会在 this 中。

另外请注意,如果播放器实际上是一个插件,那么所有这些都可能不起作用。我在 YouTube HTML5 播放器上对此进行了测试:它适用于除全屏以外的所有内容(我认为这是安全限制?),并在 #movie_player 元素处进行处理。

关于javascript - 有没有办法用javascript模拟鼠标点击时按下多个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816306/

相关文章:

javascript - 篡改猴 : display an element if it's hidden (and vice versa)

javascript - PHP的多线程ajax调用

javascript - jquery 高度返回 0

javascript - 如何在悬停对象时更新 X 和 Y 坐标

javascript - 如何允许脚本在单击链接以显示对话框后立即触发

javascript - 在 Aurelia 中将操作传递给具有父级上下文的组件

javascript - React JS this.props.data 未在子组件的 getInitialState 中定义,即使它是在渲染中定义的(并且在父级中定义)

javascript - 如何使用Jquery更改img标签的src

HTML5 游戏 handle API 问题(在 Mac 上)

javascript - 更改框架 URL