Привязки клавиатуры в скрипте содержимого Chrome Extension с GMail - PullRequest
1 голос
/ 19 сентября 2011

Я создаю расширение Chrome, которое использует привязки клавиш (т.е. будет использовать javascript keydown и обработчики событий keyup) через скрипт контента.Однако я наткнулся на препятствие, пытаясь заставить его работать с GMail.

Функция обработчика в следующем коде (скрипт содержимого), кажется, срабатывает только тогда, когда я общаюсь с кем-то через GChat:

$(window).bind('keydown', function(e){console.log('yay!');});

К сожалению, он не активируется нигде, в том числе, когда я пытаюсь отправить электронное письмо.Я посмотрел на источник веб-страницы GMail, и оказалось, что весь отображаемый контент находится в iFrame с идентификатором canvas_frame, поэтому я попытался:

$('#canvas_frame').content().live('keydown', function(e){console.log('yay!');});

и это:

$('#canvas_frame').content().find('body').live('keydown', function(e){
  console.log('yay!');
});

К сожалению, это тоже не сработало.

Мой manifest.json выглядит так:

{
  "name": "extension",
  "version": "1.0",
  "description": "description",
  "background_page": "background.html",
  "content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "css": [],
      "js": [ 
              "main.js"
            ]
    }
  ],
  "all_frames": true,
  "permissions": [
    "http://*/*", "https://*/*"
  ]
}

Мне было интересно, есть ли у кого-нибудь подсказка о том, что происходит,какой правильный способ сделать это с GMail, и если $('#canvas_frame').content().live(...) правильный путь для этого.

Спасибо!

1 Ответ

3 голосов
/ 19 сентября 2011

Ваш параметр all_frames не помещен в манифест, он должен быть:

"content_scripts": [
    {
      "matches": ["http://*/*", "https://*/*"],
      "all_frames": true,
      "js": ["main.js"]
    }
],

Я бы подошел к этой проблеме, вставляя скрипты содержимого в сами фреймы и выполняя там все привязки клавиш.Определите URL-адреса этих iframes и вставьте отдельные скрипты содержимого в каждый из них.Например:

"content_scripts": [
    {
      "matches": ["http://gmail.com/*"],
      "all_frames": false,
      "js": ["main.js"]
    },
    {
      "matches": ["http://gmail.com/iframe1.html"],
      "all_frames": true,
      "js": ["iframe1.js"]
    },
    {
      "matches": ["http://gmail.com/iframe2.html"],
      "all_frames": true,
      "js": ["iframe2.js"]
    }
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...