Каждый раз, когда вызывается chrome.runtime.onMessage.addListener
, он добавляет другого слушателя, каждый из которых продолжает вызывать каждое сообщение.
Если вы намереваетесь вызывать определенный обработчик только один раз,вам нужна некоторая логика саморегистрации, вызывая removeListener
со ссылкой на обработчик.
Если вам когда-либо нужен только один обработчик, который не меняется (что, как кажется, ваш случай), вам нужно принятьНе забудьте позвонить addListener
только один раз.
Исходя из вашего текущего кода, вы можете взять chrome.runtime.onMessage.addListener
на верхнем уровне:
chrome.runtime.onMessage.addListener(function(message) {
onPageDetailsReceived(message);
});
, а затем удалить его из getPageDetails
.Я понимаю намерение сделать callback
настраиваемым, но вам это здесь не нужно, или, по крайней мере, вам нужно убедиться, что слушатель зарегистрирован только один раз.