Страницы расширений Chrome обрабатываются как прямые URL-адреса файлов, а не как страницы сервера, поэтому для таких каталогов не существует обработчика по умолчанию, например index.html
.
Постоянный фоновый скрипт
Если ваш фоновый скрипт не имеет "persistent": false
в manifest.json, вы можете использовать webRequest API для перенаправления такого поддельного URL-адреса в реальный:
manifest.json:
"permissions": ["webRequest"],
"background": {
"persistent": true,
"scripts": ["background.js"]
}
background.js:
chrome.webRequest.onBeforeRequest.addListener(e => {
return {redirectUrl: chrome.runtime.getURL('/dist/webpage.html')};
}, {
urls: [chrome.runtime.getURL('/')],
types: ['main_frame'],
}, ['blocking']);
Фоновый скрипт страницы события
Если ваш фоновый скрипт имеет "persistent": false
в manifest.json, вы можете использовать webNavigation API для перенаправления страницы с ошибкой на реальную страницу. Единственная неприятность заключается в том, что в истории вкладки будет находиться фиктивный элемент, и кнопка возврата в историю будет активна (но, конечно, она не будет работать, поскольку она будет перенаправлена снова).
манифест. json:
"permissions": ["webNavigation"],
"background": {
"persistent": false,
"scripts": ["background.js"]
}
background.js:
chrome.webNavigation.onErrorOccurred.addListener(({tabId}) => {
chrome.tabs.update(tabId, {url: '/dist/webpage.html'});
}, {
url: [{
urlEquals: chrome.runtime.getURL('/'),
}],
});
Существует также DeclarativeWebRequest , но только в Chrome beta / dev / Canary. И просто для удовольствия, можно использовать API webRequest с непостоянными страницами событий, но это хакерство (вам придется предотвратить выгрузку страницы событий, открыв соединение сообщения из iframe внутри фоновой страницы), и оно побеждает назначение страниц событий. поэтому я не буду показывать это здесь.