Ответ 1
Проблема заключается в том, что JavaScript внутри скриптов содержимого работает в собственной изолированной среде и имеет доступ только к другому JavaScript, который был загружен одним из двух способов:
Через манифест:
{
"name": "My extension",
...
"content_scripts": [
{
"js": ["https://connect.facebook.net/en_US/all.js"]
}
],
...
}
Или используя Программируемая инъекция:
/* in background.html */
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null,
{file:"https://connect.facebook.net/en_US/all.js"});
});
Обязательно обновите разрешения манифеста:
/* in manifest.json */
"permissions": [
"tabs", "https://connect.facebook.net"
],
Добавление тега script будет фактически оценивать JavaScript в контексте содержащей страницы за пределами изолированной программной среды JavaScript, к которой у вашего JavaScript есть доступ.
Кроме того, поскольку FB script требует, чтобы "fb-root" находился в DOM, вам, вероятно, потребуется использовать программный подход, чтобы вы могли сначала обновить DOM с помощью элемента, а затем передать сообщение обратно на фоновое изображение, чтобы загрузить Facebook script, чтобы он был доступен для JavaScript, загружаемого в скрипты содержимого.