Итак, у меня есть сценарий содержимого с событием, которое запускает сообщение сценарию «запуска», который я использую, чтобы создать вкладку с локальным html-файлом и передать одно и то же сообщение/переменную на эту вкладку. Затем вкладка должна загружать определенные данные на основе переменной. Он работает примерно в 50% случаев, что заставляет меня думать, что это проблема синхронности. Я, вероятно, не собираюсь делать это правильно, но это лучшее, что я мог бы решить самостоятельно.Передача переменной во вновь созданную вкладку
Content Script (script.js):
function openHistory(event) {
var account = $(/*selector*/).html();
chrome.runtime.sendMessage(account);
}
Запуск сценария (launch.js):
chrome.runtime.onMessage.addListener(function(account) {
chrome.tabs.create({url: 'background.html'}, function(tab) {
chrome.tabs.sendMessage(tab.id, account);
});
});
HTML Script (background.js):
chrome.runtime.onMessage.addListener(function(account) {
loadPage(account);
});
function loadPage(account) {
chrome.storage.sync.get(account, function(data) {
// Do stuff with DOM
});
}
Manifest:
{
"manifest_version": 2,
"name": "Extension",
"version": "1.0",
"permissions": ["storage", "tabs"],
"background": {
"scripts": ["launch.js"],
"persistent": false
},
"content_scripts": [{
"js": ["jquery.js", "script.js"]
}]
}
Обновление: Я добавил "предупреждение (chrome.runtime.lastError.message)" внутри обратного вызова для tabs.sendMessage в launch.js, и всякий раз, когда он не работа, я получаю «Не удалось установить соединение. Конечный результат не существует.
Существует еще один упрощенный метод, который не требует передачи сообщений вообще. То есть путем объединения данных с URL-адресом, в строке запроса или фрагменте местоположения (иначе хэш местоположения). Например. 'chrome.tabs.create ({url: 'background.html #' + account});' (читайте, используя 'location.hash.slice (1)'). –
Так просто! Еще раз спасибо, Роб. =) –