【问题标题】:How to get chrome extension hotkey to work with gmail, yahoo mail etc?如何让 chrome 扩展热键与 gmail、yahoo 邮件等一起使用?
【发布时间】:2012-02-04 16:44:09
【问题描述】:

我正在使用以下代码为我的 Chrome 扩展程序实现热键:

// content script:
  window.addEventListener("keydown", function(event) {
      if (event.ctrlKey && event.keyCode == 81) {alert('Ctrl+Q Pressed!');}
    }, false);

自从在清单文件中插入以下行以来,它在大多数情况下都有效,即使选择了 iFrame:

...
  "content_scripts": [
    {
      "all_frames": true
...

例如使用http://danish.typeit.org,即使现在使用该热键和 facebook 个人消息输入时也可以使用该热键。除了使用 gmail、yahoo mail 或 gmx 撰写电子邮件时,它似乎无处不在。选择合成框时,热键不起作用。这令人失望,因为我希望人们会使用我的扩展程序来帮助编写电子邮件。而 Twitter,在 Twitter 上打字时也不起作用。

【问题讨论】:

    标签: javascript google-chrome-extension hotkeys webmail


    【解决方案1】:

    我认为即使您指定了all_frames,也没有为编辑器 iframe 加载内容脚本的原因是,内容脚本仅在加载包含页面时应用于标记中存在的 iframe。

    对于 gmail 页面,页面上有多个 iframe,其中一些出现在包含页面的标记中(内容脚本被应用到该页面),然后是编辑器的一个,它是创建的页面加载后由 JavaScript 调用。

    即使您尝试等待页面上的 JavaScript 为编辑器加载 iframe,内容脚本中的 JavaScript 也无法访问它,因为访问 iframe 的 contentWindow 对象是not allowed in content scripts

    很可能将 JavaScript 文件注入到 DOM 中,然后执行内容脚本中的逻辑。

    内容脚本可能类似于:

    document.body.appendChild(document.createElement("script")).src = "http://external/file/javascript.js";
    

    然后远程 JavaScript 文件的内容可以尝试访问编辑器 iframe,您可能需要使用 setInterval 直到元素被创建。

    // These are the IDs gmail uses, each mail app would be different
    document.getElementById("canvas_frame").contentWindow.document.getElementById(":nt")
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2016-02-09
      • 1970-01-01
      • 2012-03-24
      • 2020-02-27
      • 2012-08-18
      • 2017-04-28
      • 2012-01-07
      • 1970-01-01
      相关资源
      最近更新 更多