После получения сообщения из сценария содержимого я хочу создать новую вкладку и заполнить страницу, которую она открывает динамически (сейчас я просто пытаюсь превратить вновь созданную страницу красный).Расширение 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
напечатал название новой вкладки вместе со всеми остальными.
Что случилось? Как создать новую вкладку, загрузить HTML-страницу, а затем повернуть ее на красный?
Запуск 'chrome.extension.getURL ("blankpage.html")' в консоли возвращает 'хромированной расширения: ///blankpage.html' (не' хром: //. ..') и https://developer.chrome.com/extensions/match_patterns.html использует 'chrome-extension: // */*' в качестве примера шаблона; однако, если я помещаю этот шаблон в манифест под заголовком 'permissions' chrome, выдается предупреждение:« Permission »chrome-extension: // */* 'неизвестно или шаблон URL неверен». Помещение его в свойство 'matches'' content_scripts' также приводит к ошибке при загрузке расширения. Можете ли вы указать на какую-то документацию, которая разъясняет это? –
asnr
Я до сих пор не могу ввести в 'blankpage.html', но я могу передавать сообщения с' blankpage.js' (JavaScript для страницы HTML) на страницу расширения для динамического изменения 'blankpage.html' (который был моим исходную цель) с помощью 'chrome.runtime.sendMessage()', например: 'chrome.runtime.sendMessage ({}, function (response) {document.body.style.backgroundcolor =" red ";});'. Если вы измените свой ответ, поэтому он предлагает это как обходной путь, я буду рад принять его. – asnr
Ahh interesting ... is 'blankpage.js' javascript-файл, связанный с html' blankpage.html'? Или скрипт контента? Если вы можете вводить скрипты контента на страницы 'chrome: // *', возможно, передача сообщений в сценарий контента новой страницы в обратном вызове создания вкладки является жизнеспособным решением? Это довольно интересная проблема ... Я посмотрю еще несколько решений, когда получаю шанс :). – berrberr