首页 > 解决方案 > 内容脚本在一段时间后停止收听后台脚本

问题描述

单击浏览器操作时,我将数据从后台传递到内容脚本。一开始,它工作正常,但喝了一杯咖啡后,它就停止工作了。后台脚本正在发送消息,但内容脚本没有响应。内容脚本在所有打开的选项卡中运行。

实际上,我通过每次打开选项卡时手动检测内容脚本来解决这个问题。一遍又一遍地。它可以工作,但会创建多个 content.js 实例,我猜这对性能不利

此外,尝试改用长寿命端口连接。但是没有找到在浏览器操作事件上将消息从后台发送到内容脚本的方法

// manifest.json

    "content_scripts": [
    {
         "matches": ["http://*/*", "https://*/*"],
         "js": ["js/content.js"]
       }
     ],

      "background": {
        "scripts": ["js/background.js" ],
        "persistent": false
      },

// background.js
chrome.browserAction.onClicked.addListener(sendfunc); // waiting for the browser action


function sendfunc(tabs){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.windows.getAll({ populate:true},function(windows){
            allTabs = windows
            sendMessage(tabs)
        });
    }
}

function sendMessage(tabs){
  chrome.tabs.sendMessage(tabs[0].id, { 
    message: 'test'
  })
}

// content.js, stops receiving messages after some time, runs on multiple tabs
chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    console.log ('Got message', request)
});

我希望内容脚本将继续从后台脚本接收消息,但它不会发生。

标签: google-chrome-extension

解决方案


推荐阅读