Вы можете отфильтровать слушателя по type
, чтобы ограничить его основным документом и фреймами:
chrome.webRequest.onBeforeRequest.addListener(details => {
// do something with details.url
}, {
types: ['main_frame', 'sub_frame'],
urls: ['<all_urls>'],
});
В вашем всплывающем окне вы можете установить флажок для переключения функции.
Прослушиватель щелчка флажок сохранит состояние в хранилище:
document.querySelector('input[type=checkbox]').onclick = e => {
chrome.storage.local.set({watchPost: e.target.checked});
};
Фоновый скрипт будет прослушивать изменения в хранилище и переключать слушателя:
chrome.storage.local.get('watchPost', _ => {
toggle(_.watchPost);
});
chrome.storage.onChanged.addListener(({watchPost}) => {
if (watchPost) {
toggle(watchPost.newValue);
}
});
function toggle(state) {
const event = chrome.webRequest.onBeforeRequest;
if (state) {
event.addListener(onPost, {urls: ['<all_urls>']});
} else {
event.removeListener(onPost);
}
}
function onPost(details) {
if (details.method === 'POST') {
// ..........
}
}
Вы также можете ограничить слушателя только одна вкладка, см. документацию . Обратите внимание, что перерегистрация той же ссылки на функцию не сработает: сначала вам нужно будет вручную вызвать removeListener, а затем addListener с новым фильтром.