Я написал веб-расширение для Firefox Quantum. Расширение имеет всплывающее окно, которое при нажатии предоставляет меню из 3 кнопок. При нажатии на одну из кнопок расширение вставит DIV, содержащий iFrame, в текущую страницу пользователя.
Расширения Firefox используют API promise
и используют пространство имен browser
вместо "обратных вызовов" и пространства имен chrome
. Таким образом, Mozilla предоставляет полифилл, позволяющий легко переносить код, написанный для расширений Firefox.
Выдержка из этой статьи .
Если вы напишите свое расширение для использования browser
и обещаний, тогда Firefox также предоставит полифилл, который позволит ему работать в Chrome: https://github.com/mozilla/webextension-polyfill.
Я следовал руководству по github, чтобы изменить html-файл для моего всплывающего окна (я удалил классы CSS, чтобы сделать пример более кратким):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css?family=Nunito:800" rel="stylesheet">
<script type="application/javascript" src="../polyfills/browser-polyfill.js"></script>
</head>
<body>
<div style="display: flex; flex-direction: column; justify-content: space-evenly; align-items: center; width: 100vw; min-width: 200px;">
<button class="btn" id="3">Short Summary</button>
<button class="btn" id="5">Medium Summary</button>
<button class="btn" id="7">Long Summary</button>
<script src="choose_length_page.js"></script>
</div>
</body>
</html>
Тогда в моем файле "choose_length_page.js" у меня есть следующий код:
//Enable the polyfill for the content script and execute it in the current tab
browser.tabs.executeScript({ file: "../polyfills/browser-polyfill.js" }).then(loadContentScript);
function loadContentScript() {
browser.tabs.executeScript({ file: "../inject-content/inject.js" }).then(listenForClicks);
}
function listenForClicks() {
document.addEventListener('click', e => {
if (!e.target.classList.contains('btn')) {
return;
} else {
browser.tabs.query({ active: true, currentWindow: true })
.then(tabs => {
browser.tabs.sendMessage(tabs[0].id, { summaryLength: e.target.id, targetURL: tabs[0].url });
});
}
});
}
Однако, когда я запускаю этот код, я получаю следующую ошибку ("choose_length_page.html" - это HTML-файл в этом посте):
Почему происходит эта ошибка, и как я могу ее исправить?
Обновление 1 -
По предложению wOxxOm я попытался указать пути, указанные в корневом пакете. Я сделал это так:
<head>
<meta charset="utf-8">
<link href="https://fonts.googleapis.com/css?family=Nunito:800" rel="stylesheet">
<script type="application/javascript" src="chrome-extension://__MSG_@@extension_id__/polyfills/browser-polyfill.js"></script>
После этого я получил следующее сообщение:
[Устаревание] Запросы субресурсов, URL-адреса которых содержат встроенные учетные данные (например, https://user:pass@host/
), блокируются. Подробнее см. https://www.chromestatus.com/feature/5669008342777856.
Итак, я не думаю, что это работает.