Я прочитал все связанные с этим ошибки, и я думаю, что этот случай немного отличается. Я пытаюсь отправить сообщение из фонового контекста в сценарий содержимого. Например.chrome.tabs.sendMessage: «Ошибка порта: не удалось установить соединение. Окончание приема не существует »только на кэшированных страницах
chrome.tabs.query({
currentWindow: true,
active: true
}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {
name: name,
args: args
}, function(response){
if (!response) return callback('You tried to message a tab that does not exist');
});
});
Это будет бросать Port error
если вкладка открыта была загружена до установки расширения. Для воссоздания:
- Открыть новую вкладку и загрузить веб-страницу
- Перейдите на вкладку Расширения и перезагрузить локальное распакованное расширение
- Перейдите обратно на вкладку веба и вызывать расширение через браузер Action- - он будет бросать
Port error
, если веб-страница не будет перезагружена вручную.
Есть ли обходной путь для этого?
Спасибо, я боялся, что это может быть так. Возможно, вы знаете, что с рук - если пользователь повторно вызывает действие браузера на той же вкладке/url, будет ли повторяться сценарий на этой странице повторно, что приведет к дублированию сообщений? –
@ChristopherCliff Да, но вы можете сохранить переменную, чтобы увидеть, запущен ли скрипт. Пример: https://github.com/Rob--W/pdf.js/blob/57e623/extensions/chrome/insertviewer.js#L126-L128 –
Очень приятно, спасибо! –