Контентный скрипт не всегда получает сообщение от фонового скрипта - PullRequest
0 голосов
/ 10 января 2019

У меня проблема с тем, что мой фоновый скрипт всегда работает правильно и отправляет сообщение, но мой контент-скрипт не всегда получает это сообщение.

фоновый скрипт

chrome.webNavigation.onHistoryStateUpdated.addListener(details => {
  chrome.tabs.query({ active: true }, tabs => {
    const tabId = tabs[0].id

    if (!tabId) {
      return
    }

    console.log('sending message!', tabId)

    chrome.tabs.sendMessage(tabId, { action: 'hello' }, response => {
      console.log({ response })
    })
  })
})

скрипт содержания

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.action === 'hello') {
    console.log('message received!')
    sendResponse('message received in content script!')
  }
})

Вот случай, когда он работает:

консоль сценария содержимого

enter image description here

консоль фонового скрипта

enter image description here


Когда я обновляю страницу, мой фоновый скрипт DOES отправляет сообщение, но мой скрипт содержимого не получает его.

консоль сценария содержимого

enter image description here

консоль фонового скрипта

enter image description here


Мне нужно было обновить страницу около десятка раз, прежде чем я наконец снова заработал:

консоль сценария содержимого

enter image description here

консоль фонового скрипта

enter image description here


Вот мой manifest.json на случай, если он поможет:

{
  "manifest_version": 2,
  "name": "myproject",
  "version": "0.1.0",
  "background": {
    "scripts": ["./npm-background.js"],
    "persistent": false
  },
  "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
  "content_scripts": [
    {
      "matches": [
        "https://www.npmjs.com/*",
        "https://npmjs.com/*"
      ],
      "js": ["./npm-content.js"],
      "run_at" : "document_end"
    }
  ],
  "permissions": [
    "tabs",
    "webNavigation"
  ]
}

Любой совет будет оценен, спасибо!

...