Расширение Chrome "Получающий конец не существует".ошибка - PullRequest
1 голос
/ 09 мая 2019

Я работаю над расширением Chrome, но в последнее время я заметил, что получаю следующую ошибку (указывающую на первую строку popup.html):

Unchecked runtime.lastError: Не удалось установить соединение.Получающего конца не существует.

Я нашел похожий вопрос здесь .Но ошибка там вызвана свойством background, которое я не объявил в своем манифесте.

Я использую chrome.extension.onMessage.addListener в скрипте contents.js для прослушивания событий и chrome.tabs.sendMessage в скрипте popup.js для отправки событий.В большинстве случаев все работает нормально, но иногда я получаю вышеуказанную ошибку, и ни один из запросов ничего не делает.

manifest.json имеет следующий формат:

{
    "manifest_version": 2,
    "name": "APP_NAME",
    "description": "APP_DESCRIPTION",
    "version": "APP_VERSION",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html"
    },
    "permissions": [
        "activeTab",
        "storage",
        "clipboardRead",
        "clipboardWrite"
    ],
    "content_scripts": [
        {
            "matches": [
                "<all_urls>"
            ],
            "js": [
                "content.js"
            ],
            "css": [
                "content.css"
            ]
        }
    ]
}

Слушатель сообщенийПример:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === "this") console.log({
    dom: doThis()
  });
  if (request.action === "that") sendResponse({
    dom: doThat()
  });
  else if (request.action === "other") doOther();
  else sendResponse({});
});

Отправитель сообщения Пример:

function getSelectedTab() {
  return new Promise(function(resolve) {
    chrome.tabs.getSelected(null, resolve);
  });
}

function sendRequest(data) {
  data = data || {
    action: undefined
  };
  return new Promise(function(resolve) {
    getSelectedTab().then(function(tab) {
      chrome.tabs.sendMessage(tab.id, data, resolve);
    });
  });
}

Пример вызова отправки запроса:

document.querySelector("#this").addEventListener("click", function() {
  sendRequest({
    action: "this"
  }).then(function(res) {
    console.log(res);
  });
});

document.querySelector("#that").addEventListener("hover", function() {
  sendRequest({
    action: "that"
  });
});

addEventListener("blur", function() {
  sendRequest({
    action: "other"
  });
});

1 Ответ

0 голосов
/ 30 июня 2019

Я не уверен, что мой ответ хорош для данного случая, но если вы читаете его, вы столкнулись с такой проблемой, и, вероятно, мой ответ вам поможет.

Я потратил много времени, пытаясь понять, почему он иногда выдает эту ошибку, в то время как я работаю над версией dev и не делаю это для выпущенной версии моего расширения. Затем я понял, что после каждого сохранения кода он обновляется в Chrome и создает новую версию скрипта с контентом. Поэтому, если вы не перезагрузите страницу, на которой вы использовали предыдущую версию своего кода для создания context.js, и повторите попытку с обновленной версией, она выдаст эту ошибку.

Я просто потратил около одного дня, чтобы все выяснить, это просто, но в стеке потока есть много ответов об этом случае, так что вы пробовали их, а не думали с умом. Не будь, как я :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...