Я разрабатываю Chrome Расширение, которое извлекает идентификатор электронной таблицы из активной вкладки и управляет таблицами Google через gAPI. Я не могу определить конкретные c обстоятельства, при которых появляется эта ошибка. После некоторых успешных применений расширения всплывающее окно просто не может быть открыто снова, но фон значка расширения становится серым.
Единственный способ обойти эту проблему - перезагрузить расширение в режиме разработчика . В той же версии, загруженной для тестирования в Chrome Интернет-магазин, удаление и повторное добавление расширения ничего не исправляет. Сборщик ошибок, кажется, не обнаруживает ошибок, но при нажатии Inspect views background.html
в строке заголовка окна проверки появляется этот странный URI из второго снимка экрана вместо DevTools - chrome-extension://<id>/background.html
. После перезагрузки DevTools - chrome-extension://<id>/background.html
снова появляется в строке заголовка.
Пытался решить эту проблему, переключаясь между page_action
и browser_action
в файле манифеста (с соответствующими изменениями в background.ts
). Без эффекта.
background.ts
import {BackgroundServiceFoo} from "../BackgroundServiceFoo";
import {BackgroundServiceBar} from "../BackgroundServiceBar";
(window as any).backgroundServiceFoo = new BackgroundServiceFoo();
(window as any).backgroundServiceBar = new BackgroundServiceBar();
function tokenRefresh() {
(window as any).backgroundServiceFoo.tokenRefresh()
.catch(console.error);
}
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {urlContains: 'docs.google.com/spreadsheets'},
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
chrome.alarms.onAlarm.addListener(tokenRefresh);
chrome.alarms.create("tokenRefresh", {periodInMinutes: 30});
tokenRefresh();
index.ts использует службу из фонового скрипта, например:
chrome.runtime.getBackgroundPage(backgroundPage => {
((backgroundPage as any).backgroundServiceBar as BackgroundServiceBar).doStuff();
});
