Ваша интуиция верна, JavaScript, который запускается из скрипта содержимого как часть расширения Chrome, запускается в песочнице, которая не имеет доступа к JavaScript, который выполняется на содержащей странице.
Согласно документу Chrome о скриптах содержимого :
However, content scripts have some limitations. They cannot:
* Use chrome.* APIs (except for parts of chrome.extension)
* Use variables or functions defined by their extension's pages
* Use variables or functions defined by web pages or by other content scripts
Прежде всего, я бы порекомендовал вам рассмотреть различные сочетания клавиш. Переопределение функциональности существующих горячих клавиш для вашего собственного расширения может создать неприятный пользовательский интерфейс для тех, кто ожидает сочетания клавиш Facebook. Представьте себе, если расширение заменяет ярлыки ctrl-c и ctrl-p, которые являются частью настольной ОС, для копирования и вставки - я думаю, что у вас будут некоторые расстроенные пользователи, которые, вероятно, удалят то, что изменило поведение, которое они изучали ранее.
Однако, если вы настойчивы, то вот обходной путь для загрузки JavaScript, который будет выполняться в контексте содержащей страницы:
Редактировать: Обновлен для каждого комментария ссылка на файл JS в плагине вместо одного, размещенного в Интернете
Сначала вам нужно будет создать файл JavaScript в вашем плагине chrome: override-fb-hotkeys.js
.
Во-первых, вам нужно разместить где-то в Интернете файл JavaScript, содержащий скрипт, который вы хотите выполнить на странице, скажем, вы разместите его по адресу: http://example.com/override-fb-hotkeys.js
.
Затем из вашего скрипта контента вы можете вставить тег DOM в DOM, который ссылается на ваш файл JavaScript, примерно так:
var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.setAttribute("async", true);
script.setAttribute("src", chrome.extension.getURL("override-fb-hotkeys.js")); //Assuming your host supports both http and https
var head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
head.insertBefore(script, head.firstChild)
Затем JavaScript будет извлекаться и выполняться в контексте содержащейся страницы, а не в изолированном программном коде из плагина Chrome.