Расширение Chrome: создайте вкладку и вставьте в нее скрипт содержимого
Получив сообщение из скрипта контента, я хочу создать новую вкладку и заполнить страницу, которую она открывает динамически (сейчас яЯ просто пытаюсь превратить недавно созданную страницу в красный).
eventPage.js:
// ... code that injects another content script, works fine
// Problem code...
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse)
{
chrome.tabs.create({url: chrome.extension.getURL("blankpage.html")},
turnTabRed);
});
function turnTabRed(tab)
{
chrome.tabs.executeScript(
tab.id,
{code: 'document.body.style.backgroundColor="red"'}
);
}
Это успешно создает новую вкладку и загружаетblankpage.html
(это просто HTML-страница с некоторым текстом) хорошо, но не может закрасить фон красным цветом. После вставкиconsole.log()
заявления в разных местах и дурачиться в отладчике, я убедился, чтоturnTabRed
называется,tab.id
действительно идентификатор недавно созданной вкладки, и если я позвонюdocument.body.style.backgroundColor="red"
из консоли фон новой вкладки становится красным. Я заметил, что если бы я добавил
(*)
chrome.tabs.query(
{}, function (tabArr) { for (var i = 0; tabArr[i]; i++)
console.log(tabArr[i].title); });
в телоturnTabRed
название новой вкладки не будет выводиться на консоль, что предполагает, что сценарий вводится слишком рано, поэтому я попытался отложить внедрение с помощьюsetTimeout
и когда это не удалось, я попытался прослушать событие завершения состояния:
function turnTabRed(tab)
{
chrome.tabs.onUpdated.addListener(
function(tabUpdatedId, changeInfo, tabUpdated)
{
if (tabUpdatedId == tab.id && changeInfo.status &&
changeInfo.status == 'complete')
chrome.tabs.executeScript(
tabUpdatedId,
{code: 'document.body.style.backgroundColor="red"'});
});
}
что тоже не удалось. Вызов (*) после ожидания сsetTimeout
распечатал новую вкладкуназвание вместе со всеми остальными.
Какие'S не так? Как я могу создать новую вкладку, загрузить страницу HTML, а затем сделать ее фон красным?