背景与内容脚本的通信

时间:2018-12-22 12:25:04

标签: javascript google-chrome-extension

我正在尝试与内容脚本交流背景,但是我的方法行不通。而且我想知道为什么它不起作用以及如何解决此问题(其他解决方案不起作用。idk为什么)。

Manifest.json:

{
    "manifest_version": 2,
    "name": "X",
    "version": "2.0",
    "browser_action": {
        "default_title": "title"
    },
    "permissions": [
        "activeTab",
        "tabs"
    ],
    "content_scripts": [
        {
            "matches": ["https://*/*"],
            "js": ["content_scripts/jquery.min.js", "content_scripts/script.js"],
            "run_at": "document_idle"
        }
    ],
    "background": {
        "scripts": ["background/background.js"]
    },
    "icons": {
        "16": "icon.png",
        "32": "icon.png",
        "48": "icon.png",
        "64": "icon.png",
        "128": "icon.png"
    }
}

Background.js:

chrome.tabs.query({active: true}, function (tabs) {
    tabs.forEach((cur, i)=>{    
        chrome.tabs.sendMessage(tabs[i].id, {"delBody": true})
    })
})

ContentScript:

chrome.runtime.onMessage.addListener(function(obj, sender) {
    if(obj.delBody)
        document.body.remove()
})

1 个答案:

答案 0 :(得分:0)

非常感谢您。问题出在

  

当您的扩展程序在浏览器启动/更新中加载,尚未插入内容脚本时,后台脚本就会运行

所以我这样解决:

内容:

chrome.runtime.sendMessage({"getInfo": true})
chrome.runtime.onMessage.addListener(function(obj, sender) {  
    if(obj.delBody)
        document.body.remove()
})

背景:

chrome.runtime.onMessage.addListener(function(obj, sender) {  
    if(request.getInfo) {
        chrome.tabs.query({active: true}, function (tabs) {
            tabs.forEach((cur, i)=>{    
                chrome.tabs.sendMessage(tabs[i].id, {"delBody": true})
            })
        })
    }
})