【问题标题】:Keydown Which Not Working Chrome ExtensionKeydown 哪个不起作用 Chrome 扩展程序
【发布时间】:2016-02-08 09:01:06
【问题描述】:

我一直在为我的谷歌扩展的想法而苦苦挣扎,而你一如既往是我最后的希望! :))

好吧,我想点击我的 chrome 扩展上的按钮,这将导致页面扩展上的 keydown 模拟正在运行。

我认为 chrome 在我的想法上有一些安全问题,会阻止键盘模拟(使事件 isTrusted:false)并删除哪个属性。

我编写的函数在 jsfiddle 上运行良好,但似乎 chrome 扩展程序以不同的方式执行此操作。

这是内容脚本文件:

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  if(request.action == "scrollToTop"){

  }
  else if(request.action == "scrollToBottom"){

  }
  else if(request.action == "enter"){
    triggerKeyboardEvent(document,13);
  }

  function triggerKeyboardEvent(el, keyCode){
    var event = new Event("keydown", {"bubbles":true, "cancelable":true});
    event.which = keyCode;
    el.dispatchEvent(event);
  }

});
chrome.runtime.sendMessage({action : "show"});

jsFiddle 上的日志写道:

Event {isTrusted: false, which: 13}

登录网站:

document.addEventListener('keydown',function (e) {
      console.log(e)
}

只写:

Event {isTrusted: false}

【问题讨论】:

  • 我遇到了这个问题,我通过this 解决了
  • 哇,非常感谢伙计!我更改了一些内容并将其添加为答案!

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


【解决方案1】:

感谢@BG101 和@Rob W,我发现解决方案是脚本注入!

唯一的是,根据MDNKeyboardEvent.initKeyboardEvent() 已被贬低,所以我将代码替换为:

var event = new Event(event, {"bubbles":true, "cancelable":true});

另外,因为我希望触发器在文档上运行,所以我删除了元素选择器的东西。这是我得到的:

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
  if(request.action == "scrollToTop"){
    triggerKeyboardEventOnDocument("keydown",38);

  }
  else if(request.action == "scrollToBottom"){
    triggerKeyboardEventOnDocument("keydown",40);

  }
  else if(request.action == "enter"){
    triggerKeyboardEventOnDocument("keydown",13);
  }

  function triggerKeyboardEventOnDocument(event, keyCode){
    var script = document.createElement('script');

    script.textContent = '(' + function(event, charCode) {

        //Create Event
        var event = new Event(event, {"bubbles":true, "cancelable":true});

        // Define custom values
        // This part requires the script to be run in the page's context
        var getterCode = {get: function() {return charCode}};
        var getterChar = {get: function() {return String.fromCharCode(charCode)}};
        Object.defineProperties(event, {
          charCode: getterCode,
          which: getterCode,
          keyCode: getterCode, // Not fully correct
          key: getterChar,     // Not fully correct
          char: getterChar
        });
        document.dispatchEvent(event);
      } + ')(' + '\"' + event + '\", '+ keyCode + ')';

    (document.head||document.documentElement).appendChild(script);
    script.parentNode.removeChild(script);
  }

});
chrome.runtime.sendMessage({action : "show"});

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 2014-06-01
    • 2015-01-16
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2011-07-16
    相关资源
    最近更新 更多